ネットワークやバイナリファイル編集でバイト配列操作する機会多いんだけど、何を使うのが一般的なの? StreamにしてBinaryReaderやBinaryWriterで読み書きしてたら、バイト配列は添字使って編集するのが速いし確実とかCみたいなプログラム書くおっさんPGに言われちゃった・・・
>>2 同じく「確実」の意図が分からないからそれは置いておいて byte配列のほうが速いのは確か ただしネットワーク通信やファイル入出力の所要時間と比べれば微々たる違いだろうから 先頭から順に読み書きできればいいならBinaryReader/Writerで、 ランダムアクセスしたいならbyte配列で操作すればいいと思う StreamでもPositionやSeek()で位置を動かせるけどあまり見ない気がする >>2 C#の最新事情でいうと、Span<T>という安全なポインタのようなものが入ったり、 それに伴ってBinaryPrimitivesみたいな低レベルなユーティリティが充実したりして、 残念ながら時代はCおじさんの方にある >>2 むしろStreamにする意味って何なんだろうとw 他の形式のデータも透過的に扱いたいのでなければ意味がない気が C#という事ではないのかもしれませんが相談させてください。 複数のPCで複数のアプリが稼働していて、これらの稼働状態をモニタリングしたいと考えています。 正常に動作しているか、今どういう状態か程度で、止まっていたりしたら知りたいです。 各アプリから状態をDBに都度登録してもらい、それを監視すればいいかとも思うのですが、 この方法だとアプリが正常に動作していない場合とかは、DBの更新が止まっているのを判断するしかありません。 このような案件の場合、よい方法、定番の方法ってあるでしょうか?
>>7 決まったフォルダ、アプリ別ファイルに状態を書き込むだけでいいような >>7 正常に動作していない、を判定するのは無理だよ。 正常に動作していなかったら、「正常に動作できてません」って発言すら信用できないっしょ。 素直にアプリ側にたとえ報告することがなくても、忙しくても何が何でも一定時間おきに「動作中」を送信させて、DBには時間とともにそれを記録して、 確認側は最後の時間から一定時間過ぎても更新が無いことを確認するしかないと思うよ。 レスありがとうございます。 やはりウォッチドッグで監視するのが定番なんですね。
もともとDBに何か記録するのがそのアプリのお仕事ならともかく、 そうでないなら何でわざわざDBにって印象は受けるなあ まあ、何か事情はあるんでしょうが
>>13 DBは使ってますが、特に拘りがあるわけではないです。 何が一般的ですか? 一般的とか定番とかにこだわりすぎ 君のシステムにあったものを選択すればいい すでにシステムとしてDBを利用してるなら、その横で正常動作を監視するのには何の違和感もない
>>14 いや、監視役のPCの監視用のアプリが直接各PCのアプリに確認するとか、 逆に各PCのアプリが定期的に報告するとか、そっちの方が回りくどくないんじゃないかと思っただけ。 だから直接通信できないとか何か事情があるのかなと >>16 なるほど、確かにそうですね。 ソケット通信みたいなプロセス間通信でって事でしょうか? 時間の関係で監視アプリはまだ未定で、取り敢えずネタを仕込む仕組みだけは考えておこうと言う思いでDBが浮かんだんでしょうか。 それこそZabbixなどの監視スイートでいいだろ サーバーとクライアントに出来合いのフリーソフト入れるだけで、このスレの連中が10年かけても作れない立派な監視システムの出来上がり
デリゲートってのがよく分からんのですが、 C言語の型だけ並べた関数ポインタみたいなものですかね?
>>19 関数ポインタの配列ぐらいに理解しておいて問題ないかと 細かい違いはおいおいと >>19 ヤることが定義できるって素晴らしいよね? 愛の形って関数が、セックルだったり、妹の靴下を嗅ぐだったり、ブラを嗅ぐなり 他のPCの共有フォルダの内容を表示したいのですが、どうやってIDとパスワードを使って接続すればよいのでしょうか?
WNET系のwindowsAPI叩くか net useか
>>26 マイクロソフト商品と親和性が高い場合がある >>26 国内だとJavaに比べるとエンジニアの平均スキルが高く、案件の質が良い >>26 過去のしがらみがないので (ちょっとはあるけど) 良い進化ができる 悪いことは言わん。 C#はやめとけ。C++の方がまし。
悪いことは言わん。 C#はやめとけ。Javaの方がまし。
C++やり過ぎて複雑すぎ C# バランスがいい。速度必要ならunsafeも簡単にできるし。 java やらなさすぎ。速度必要ならJNIに逃げるしかない。
パラダイムが同じならどの言語でも大差ないだろ どうせ複雑な機能は使わない 複雑にならないように設計して実装するのが腕の見せ所でござろうよ
まぁ、ラピッドリリースになった最新のJavaならラムダに始まってvarによる型推論もできるようになったり結構ストレスなく使える。 後はProject panamaやヴァルハラ?などのvaluetypeやら。コルーチンやasnc/awaitやらが来れば後10年は戦える。 プロパティも欲しいとこだが今さらこれは望み薄だろう。
C#は7.xで参照が強化されて超複雑になったよ 低レベルなタスクに関わる一部の人だけが知っていればいいと思われがちだが、実は決してそうではない 最新のBCLには従来は配列とインデックスをセットで渡してたメソッドに軒並みSpan<T>のオーバーロードが追加されていて、早くも第一級の扱い 今後は新規APIについては基本的にSpan<T>のみをサポートするようになるだろう
ライブラリを使う側なら精々AsSpanだけ覚えりゃええんちゃうの
正直なところ聞きたいのだけどEFって業務システムで使える? 小規模のWebサービスのプロトタイピングにはイイかなーと思うけど大規模にも耐えうるのかな
EFはモデルの一貫性を強力に維持しながら継続的にモデルに手を入れていくような開発スタイルに適してる 巨大な単一のデータモデルを維持するようにはできてない 大規模開発でEFなら適切にドメインを分けてやらないとスケールしないよ
2つのPC間でデータ送受信を行う際、現状はデータの最後に"<EOF>"を付加してファイルの末尾であることを通知しています。 これをなくして、送信側がデータの最初にデータサイズを明記し、受信側はそのサイズだけデータを受信したら受信完了という処理に変更しようと思うのですが、 みなさんの経験則的にはこれは悪手でしょうか?
>>45 パスカルの文字列がそんなん。 電文ならASN.1がまさにそんな感じで「データ形式、データ長、データ」の連続。 >>45 そうしたほうが 受信側は必要最小限のバッファ確保で済むし データ中に"<EOF>"を含められるし いい事ずくめに見える >>45 申し訳ないけど全体的に何を言ってるのかよく分からないけど、 現状データ長を含まないってことは必然的にデリミタで区切る文字列ベースの メッセージってことになると思うけど、そういうこと? それならむしろ何のためにデータ長を含めたいのか分からない 送る方のコードも面倒が増えるだけだし、万が一データ長が間違ったメッセージが 送られてきたら後まで引きずっちゃうと思うけど データ長が狂う環境なら、何かがEOFになったり、EOFが何かになったりする可能性を潰すほうが大変じゃないか? 化けにくくてチェックもしやすい、データ長を渡すほうが良いと思うよ。
>>45 そもそもなぜ変えたいのか? 何か問題あった? 一般的もしくは定番の方法が知りたいだけでないかなあ 金曜日にもそんな質問者がいましたけど
受信インターバルタイムアウトってのもあるな。 例えば9600bpsの場合、ざっくり1文字送るのに、 パリティとエラー含めて11ビット位だったかな。 めんどくせーから16ビットで1文字送ったとして、 1000[ms]÷9600[bps]×16[bit]で、1.66666…[ms]。 2文字無通信時間で打ち切るとして、約3.2[ms]の間、文字が来なかったら、そこで通信を打ち切る。 C#でそこまで精度でるか知らんけどな
>>52 ケースバイケースだよね どういう方式っつかタイムアウトで全ての辻褄を途中でリセットする仕組みがあって実際に復帰できるか? が重要 大手の試験もそういうのが多い asioとかタイムアウト設定できなくてクソ過ぎて死んだけど >>53 > パリティとエラー含めて11ビット位だったかな。 エラーってなんだよ w 8ビットデータを調歩同期で送るなら スタート(1) + データ(8) + パリティ(1) + ストップ(1〜2) だから11〜12ビット/フレームだな てか、今どきシリアル通信じゃなくて独自プロコトル + TCP/IPとかじゃないかな 例えば下限が-10、上限が10として、 上限がくるまではずっとインクリメントして、 上限到達後、下限がくるまではずっとデクリメントするような、 数値間で折り返しを続けるプログラムを考えてみました。 https://ideone.com/LVqCtz ↑これだと上限に達したか、下限に達したかのフラグや それを判定する箇所がスマートではない気がするのですが、 よりよい方法をお教えいただけないでしょうか >>58 スマートの定義をして どんな方法聞いたって ウンコって言うんでしょ? >>58 var asc = Enumerable.Range(lower, upper - lower); var dec = asc.Reverse().Skip(1); var seq = asc.Concat(dec).Repeat(100); foreach (var x in seq) Console.WriteLine(x); >>60 訂正 一行目は (lower, upper - lower + 1); の間違い >>58 ベタに書くのが一番でしょ 難しく考えるのも変な技巧を凝らすのもよくない IEnumerable<int> AlternatingSequence() { const int min = -10; const int max = 10; for (;;) { for (int i = min; i < max; i++) yield return i; for (int i = max; i > min; i--) yield return i; } } >>60-62 ありがとうございました とくに>>62 さんの案がしっくりきました yieldは見たことはありましたが実装したことがなかったので勉強になりました int f(int x) { int xx = x % 20; if (xx < 10) return xx - 10; else return 20 - xx; } Enumerable.Range(0, n).Select(f)
情報処理試験の勉強をしていてセマフォというものを知ったのですが、C#の実務で使うシチュエーションはあるでしょうか? いつ使うのかなと疑問に思いまして
使わないよ ドカタ現場で使っても誰も理解できないだろうし、業務アプリのアプリケーションコードのレベルでそんな細かい排他制御が必要になることはまず無い 普通にロックすればよい
他にスマートな並列処理制御が沢山有るからセマフォ、ミューテックス、lockは最後の手段という感じ
WindowsFormでテキストボックスのスクロールバーを切り離したいのですが テキストボックスとは別に配置したVScrollBarをコントロールの スクロールバーと連動させるにはどうすればいいですか? スクロール位置については調べて出てきた物を弄ればいけそうなのですが、 長さをどこで読めば良いのかわからず…… 用途としてはテキストの折り返し位置を数値指定したくて無理矢理実装した状態です。 テキストボックスのサイズ自体を変更し、ワードラップを利用して無理矢理テキストの折り返しを作ってるので テキストボックス自体のスクロールバーは隠してしまって 目に見える場所に操作用のスクロールバーを置きたい具合です。 Textboxをオーバーライドしてテキストの表示領域そのものを弄る事ができるなら そちらのほうが理想なのですが、自分ではどこをどう弄ればいいのかわからず…… よろしくお願いします。
>>72 すみませんPaddingとか右余白で散々ググって出てこなかったので 無いものと思い込んでたんですが>>73 を見てプロパティ漁り直したら 普通にRightMarginを発見して解決して顔真っ赤にしてるので無かった事に…… 俺の半月はなんだったんだ………… スレ汚し失礼しました!! >>74 スクロール位置はそのページとかで沢山サンプルがあるのですが スクロールバーの長さを連動させる方法が分からなかった具合です……! 結果そんなことをする必要はなかったのですが 色々応用が利きそうなので今後のために知っときたさはあります…… IntPtrからList<int>に変換する方法を教えてくださらんか...
>>77 IntPtr型の値が指すアドレス基準に、指定個数分のデータを、という話なら Marshal.Copyで配列にコピーしたあとにListに変換する >>77 unsafe { var list = new ReadOnlySpan<int>((void*)ptr, n).ToList(); } VBA上がりでC#勉強中なんですが、 別クラスに書いたコードを使いたい時、 ○○ △△ = new ○○を記述して使ってるんですが、form Loadとかchangeイベント等で復数回登場する時でも都度使う所の近くで書いた方がいいんですか?それとも上部のpublicの所に書くのがいいんですか?
>>80 どうでもいい 人間の操作によって発生するイベントの頻度なんぞコンピュータの時間スケールからすると全く無視できる >>80 メソッド間でインスタンスを共有すべき理由がないなら個々のメソッドでインスタンス化したほうがいい メソッドの独立性が高まり変更しやすくなるから namespaceまで作ってプログラムしたことが無いのですが、プロは駆使するのが普通なのでしょうか? アニマルインタフェース実装した猫クラスと犬クラスを人クラスがメッセージ出して鳴かせるレベルの超初歩設計しかした事無いので、どこでnamespace使うのかなと悩んでおります
ファイルいっぱいあったらフォルダ分けして整理するやろ? namespaceもおんなじようなもん
>>80 変数宣言や初期化の位置と 使用場所との距離の質問だとして 宣言箇所と使用箇所はなるべく近くにするのが言語に限らずセオリーだよ 可読性とリファクタリングの点で >>80 C時代の名残りはVBAに強く引き継がれ VBA使いがC#に引き継いで行く 最初からpythonやる人間を雇うのが正解 JavaをやっていてJavaらしいコードを書ける人は大勢いるだろうけどさ C#らしいコードを書ける人って、C#でプログラミングをしてる人の1割もいないんじゃねえのか?
千行近いメソッドで変数が先頭でまとめて宣言されてるC#のコードみるとゲンナリ
だってBasicから始めた自分は 変数は頭にまとめて書いてある方が分かりやすいモン!
>>80 は >それとも上部のpublicの所に書くのがいいんですか? と書いているので、質問の意図はメソッド内の変数の宣言や初期化の位置についてではなく、 同じクラスのインスタンスを複数のメソッドでnewして使ってる時に、 これをローカル変数ではなくフィールドにした方がいいのか?ってことじゃないのかな。 そうであるなら答えはNo。 フィールドにしなくても要件を満たせるものをフィールドにしてはいけない。 何にしても、質問は意図が分かるように書いて欲しいね。 forのループ変数がループの外で宣言されて使い回しされてるのわろた
クソコーダーのこだわりなんざどうでもいいからさっさと動くのリリースしろよ。テストできねーじゃねぇか。
W indows Fromアプリを作っています。 途中でアイコンを変更しました。Formプロパティ部分とプロジェクトのプロパティ-アプリケーションのアイコンの2か所です。 実行時のFormとエクスプローラでも詳細表示は変更後のアイコンになるのですが、エクスプローラでの大アイコンやショートカット、ドラッグした時のアイコンが古いままです。 どうすれば新しいアイコンに更新できますか。
一度Windows標準のアイコンに戻して 再度新しいアイコンを選択してSaveしてから 再起動すれば更新されてない?
>>94 アイコンファイル自体に問題がある、なんてオチだったりしない? >>94 アイコンが変更されるのはWindowsの気まぐれだから変更されるまで待て >>95 >>96>>97 レスありがとうございます。 アドバイス試してみましたがダメでした。気長に待ってみます。 アイコンってどっかでキャッシュクリア的なことできなかったっけ?
>>99 やってみたけどダメだった 気長に待つしかない 質問ですが デバッグ構成でのexeとリリース構成でのexeは デバッグ情報が邪魔する分、デバッグexeの方が遅いという話は知っていましたが 「微々たるもんだろ」とあまり気に留めてませんでしたが それが原因と思われる現象に当たりまして・・・ デバッグは問題無く通るので実行すると、データが混雑すると固まるのです 試しにリリース構成のexeにしたら問題無く動きます どうやらデリゲートのBeginInvokeを使っているので 非同期処理になりタイミングずれにデバッグ情報が相まって固まってるようなんだけど こういう場合 「リリースexeで問題無いならいいじゃん!」なのか 「いやいや、タイミングがずれるとエラーが出る可能性があるなら対処しておくべき!」なのか どうなんでしょうね?
Html Agility Pack を使ってHTMLのスクレイピングをしているのですが、 ↓のソースだと<h1>タグが存在していないとNULLエラーになります。 Try Catch を使わないでエラーを出さずに済む方法ってありますか? // Html Agility Pack var htmlDoc = new HtmlAgilityPack.HtmlDocument(); htmlDoc.LoadHtml(htmlText); var elm = htmlDoc.DocumentNode .SelectNodes(@"//h1") .Select(a => a.InnerText);
SelectNodesがnull返すなら .SelectNodes(...)?.Select(...)
>>104 . SelectNodes(...)?.で解決しました var elm?とか .Select()?とはやったのですがうまくいかず、わからなかったのですが そこで使うんですね ありがとうございました。 >>101 原因の予想をそう考えているなら、CPUクロックを 1GHzとか遅くしてリリースexeで試してみるとか (PCに負荷がかかっててもうまく動作するかってこと) XMLを読み込んで編集して保存する方法はいくつか有るようだけど制約なければXDocument使っとけばOK? ちなみに構造が複雑なので静的モデルを作ってデシリアライズ->シリアライズが難しい場合の話
>>101 それReleaseでも負荷高くなったら起きるんじゃないのか >>109 それでいい XMLを使わなければならない制約もないなら今のMSはJSON.NETを強く推奨してるけど PC版Lineに来る最新メッセージを読み取る方法ってある? 調べても出てこず...
>>112 Kakaotalkのメッセージはやったことあるけど 暗号化されいて凄くめんどくさいよ。 俺なら素直に諦める。 >>113 APIみたいなのはやはり準備されていないのね 把握した 調べまくる時間とか無駄にせず助かりました console.writeってコンパイルの最適化時に削除されますか?
>>115 されたら困る それデバッグ用の機能じゃないよ 最終リリースする時は、console.writeの類のものは削除しないとexeの中に入ってしまうんかな?
#if DEBUG Console.WriteLine("Debugにゃん"); #endif
>>119 ありがとうございます、Debug.Writeを使うようにします。 工数一週間以上の開発ならちゃんとしたロギングライブラリ使ったほうがいいよ
>>121 全部クソ なんでキューに入れんねん キューに積む形のログ出力ライブラリは全部クソ ログアウト id223しました ログイン id223しました ってアホかw どのログ出力ライブラリの話をしているかは知らないが キューで実装されているならログ順序は保証されるだろうに もしくはスレッドセーフでないライブラリを複数スレッドから触っているか
>>123 え?スレッド間で? お前ちょっとだけ頭使ってレスしろよ >>123 情報が小出しかつ不明瞭だからエスパーしているが 複数スレッドからログ出力する場合の順序が未保証だからじゃないか それがログ出力ライブラリとして妥当かどうかは更に別の話になるが キューに積む積まない問わず、いいログ出力ライブラリって何がある? 最近だとSerilogかな ファッキンビチグソlog4jのパクリ系じゃないからシンプルで使いやすいし、 後でログの解析が非常に容易
私たち日本人の、日本国憲法を改正しましょう。 総ム省の、『憲法改正國民投票法』、でググって みてください。拡散も含め、お願い致します。
log4系はネット上に情報が沢山あるのと 自分が溜め込んだ資産が沢山あるからつい使いまわしちゃうな 仕様は確かにファッキンだが
>>128 使い方間違えててマルチスレッドモードになってない率95%のlog4さんじゃないですか GUIアプリケーションでのawaitについて教えてほしいんだけどさあ ↓この処理をボタン等のイベントから実行した場合、JklあるいはAsdfasyncが終了したかどうかってどうやってメインスレッドから取得するものなの? async Task Asdfasync(){ await Jkl();//終わるまで画面をロックさせたくないが、これが終わっていない段階で他のボタンを押されると困る }
それが使えるのならありがたいけど、ボタンのイベントから呼び出されたメソッドの戻り値って取得できるものなの?
素直ににawaitの前後でボタンをDisable/Enableではあかんの? そもそもそのためのawaitでしょう。 もちろん、常にそうできるわけじゃない(JKが終わったからって無条件でボタンをEnableに できないような要件もありうるから)だろうけどほとんどの場合はそれでいいでしょ
await は非同期処理を、同期的に書けるもの await で検索すれば?
>>133 そのAsdfasyncとやらは直接イベントに接続せずに 別のイベントハンドラから自分で呼び出すんやろ? 先に云っとく、良いソースじゃない。 こういう雰囲気? Formにボタンを2つつけて動かしてみて private Task __results; private void button1_Click(object sender, EventArgs e) { if ((null == __results) || (__results.IsCompleted)) { System.Diagnostics.Debug.WriteLine("Pass"); __results = Task.Run(() => { this.Invoke(new Action (() => { button2.Enabled = false; } )); Task.Delay(5000).Wait(); this.Invoke(new Action (() => { button2.Enabled = true; } )); }); } else { System.Diagnostics.Debug.WriteLine("Fail"); } }
ごめんなさい。 たぶん、全然検討違いだな。 スレ汚しごめん
コンボボックスが20個。 エクセルシート2の指定列の内容を各コンボボックスに入れる。 ※cbo1には4列目、cbo2には10列目などバラバラ。 closedExcel?で読み込んで入れたんですけど、うまい作り方を教えてください。 Clsdata.CboAdd(this,tarPath,tarShtname,”4”,cbo1) みたいに引数違いを20個書き、別クラスに追加するコード書いたんですけど、データだけ取ってきてクラスじゃなくフォームの方に書いた方が分かりやすいですかね? 別フォームでもコンボボックスに同じように追加するのがあるので使い回してるんですけど... 説明下手で申し訳ないですが、ご教授下さい。
>>139 ワークシートを操作するクラスを作って、そこに列のデータをobject[]かstring[]で返すメソッドを書く public object[] GetColData(int col) { ... } それをコンボボックスにセットするコードはForm側に書く。 コンボボックスを引数で渡すような馬鹿なことはしちゃだめ >>139 1クラスでlist<string>を作る シート番号、セル開始行、列、セルの終わりを入れる combobox1.items.AddRange( )で 2 コンボボックスをList化しておく コンボボックス番号を入れるとitemsにかえしてくれるクラスにする 3 エクセルにコンボボックス番号、シート番号、セル範囲をかいておく それをコンボボックスのアイテムに入れてくれるクラスを作る エクセルをいじるだけでコンボボックスのデータができる こんな感じかな? C#やってきたけどjava土方のが仕事あって羨ましい シンタクスは似てるけど採用側はjava経験者しか見ないし 最初の開発重要だな
>>142 Javaは絶対やっといたほうがいいよ。 c#perであれば2日で基本はマスターできるよ。c#と違ってawt,swing,fxは全部使い物にならないからパスでいい。 後はspringframeworkぐらい理解しといたら間違いなし。 Javaは21世紀のCOBOLなんだからあと30年はやっていける。 ユニットテストやらリファクタリングやらデザインパターンの本は大抵Javaで例示してあるからそっち勉強するならJava知ってて損はないな
いや、そもそもJavaの案件なんかやらない やれって言われてもやらない
へーJava勉強してみようかなー ってJavaとJava Scriptの違いをさっき調べて知ったくらいだけどwww
ババ引いてくれる底辺労働者一人確保出来て良かったね
まずこの本で、オブジェクト指向を学ぶのが、Java の定番! スッキリわかる Java入門 第2版、2014
>>140 >>141 ありがとうございます。やっぱコンボボックスの引数はよろしくないですよね。 内容を取ってくるコードって一回で読み取る事は出来ますか?上から繰り返しで配列に入れるんですかね? ずっとC# + Windows FormsでGUIやってたけど、C++とWin32API使い始めたら、めっちゃ高速でびっくりだよ。 GIUI使いたい人はC#なんて捨てちまえ。
>>151 できる コンボボックスを配列化する シート名 列番号をエクセルにデータで書いておいて あとはforで繰り返す >>152 このスレC++,MFC,ATL,COM+を経て、C#のやつも結構おるだろ 個人で作るならだけど、納期に間に合わせる。 バグ作って責任取らされる。 そう言うリスクから離れたいから、仕事じゃ使いたく無いな。 いあ、もう辞めたけど。
リアルタイム通信系なら少しでも高速化するのは理屈通ってるけど そうでないのなら安定感捨ててまでコンマの差を取るかというと…… って印象であってる?
一般的にはその認識は間違ってる 納期の制約があるなら最初の開発段階での最適化は結果的にアプリケーションのパフォーマンスや品質を下げる原因になることが多い 一度組み上げてから余った時間で最適化やバグ取りをした方が品質はほぼ間違いなく高くなる
.NETの黎明期から耳タコのはずだけど、そもそも大半のケースは 起動の遅さをパフォーマンスの悪さと錯覚されてるだけw >>151 プログラムはシンプルに。 何を言ってるのかよく分からないけど、複数の列のデータを一度に返すメソッドを書きたい、 と言ってるなら、そんなことは出来てもやらない方が吉。 そんなのは多分可読性を下げるだけ。 ベタに、 ComboBox1.Items.AddRange(xlSheet.GetColData(5)); ComboBox2.Items.AddRange(xlSheet.GetColData(1)); ComboBox3.Items.AddRange(xlSheet.GetColData(9)); ... こう書いた方がぱっと見て何やってるかわかるでしょ。 こういう羅列がどうしても許せないならTagに対応する列の番号を入れておく方法もあるが、 個人的にはお勧めしないなあ >>152 確かにめっちゃ高速なんだが保守要員の確保はどうなんだ? App.configを使わずにサブフォルダからDLLを読み込むようにしたいのですがどうしたらいいですか?
>>155 MSC+SDKでC言語の頃からやってる >>162 「C# pathを通す」で検索してトップに出てくる記事の方法でたぶん出来ると思う closedXMLで指定された列の空以外の最終行のnumberの取得のコードってないですか?
>>162 AppDomain.CurrentDomain.AssemblyResolve >>163 Windows3.1かな? 既にMFCは出てたはずだけどCのほうが慣れてる(て言うかC++はわけワカメな)ので最初はC+SDKのパターンもあったとか聞いたことある ジジイばかりじゃねーかw って俺も孫が先月産まれた訳だがw
DataGridViewは便利だけどデータの絞込とか実装できないんよねぇ・・・
>>168 MFC(VC)以前のWindows3.0から >>169 今更何を言ってるんだよ w 掲示板と言うメディア自体が爺しかいなくなってる 今の若者は顕示欲が強いく批判もされたくないから実名でブログの方が理にかなってるのだろう
>>172 おお、Windows3.0を使ってた人なんて初めて見たわ 3.1から使い始めた俺はまだまだ若造なんだな w ⒊0は日本じゃ売られなかったって誰か教えてやれよ。。。
>>176 え? Windows for Workgroupsと勘違いしてるのかな? 悪かったよ。 B何てあったんか。 PC98懐かし過ぎて二度見したわw
>>174 そう言うのもあるだろうけど、俺等の世代はテキスト主体だったけど今の若い奴等は画像メインって言うのが大きい気がする 俺だけかも知れないけど640KBでやりくりして56Kbpsがスゲーって言ってた世代の記憶は一生消えないと思う Task.Delay()の時間設定ってかなりテキトーですか? 0と1msがあまりにも差がありすぎる気がス
>>180 そりゃ「"最小***ms以降"で目を覚まして」ぐらいの意味だからねそれ 1ms単位できっちりスレッド切り替えを保証できるOSでは無いのだ 状況次第だけどMMCSSやtimeBeginPeriod(非推奨)を設定すればある程度改善できる場合もある >>181 そうなのか 正確に測ったわけじゃないけど1msに設定しても 体感的に10msくらい止まってる気がする 短い停止はThread.Sleepのほうがレスポンス速いな でもこっちは長くするとデッドロック?しちゃう でTass.Delayにしてみたんだけど・・・ あちらを立てればこちらが立たずだな 10ms ぐらいだろ 組み込みみたいな、リアルタイムOS じゃないから
>>179 DOS=HIGH これも未だに覚えてるわ オフセットとセグメントというめんどくさいもののおかげで +64K-36バイト余分があるという 絶対パスなら(先頭に¥マークを含む)相対パスに変換するって処理って何か関数あるかな?
大分離れたけど、何年か前のC#6か、それより前で文字列に@付けたりなんだりで解決してなかったか?
>>185 Path.GetRelativePath 配列の次元を動的に決める方法ってあります? 例えばHairetsuっていう名前のオブジェクトがあったとして、 コンストラクタでhoge(int x)が呼び出された時は1次元配列、 hoge(int x, int y)が呼び出された時は2次元配列にしたい。
>>190 Array.CreateInstance? >>165 一行で書くとこんな感じ? worksheet.Columns("A").First().Cells(true).Max(cell => cell.Address.RowNumber); sizeof(char) は 2 なのに Marshal.SizeOf<char>() が 1 になるのは何故ですか?
ダブルクリックするとデフォルト値に戻るTrackBarを作りたいのですが Trackbar.DoubleClickイベントを追加してもクリックイベントが動くだけで反応してくれません…… ググった情報を参考に継承クラスにしてからSetStyleでStandardDoubleClickを追加しても無反応でした よければご教授よろしくお願いします……
>>195 簡単だろ...と思ったけどそうでもないみたいね CreateParamsオーバーライドしても出来なかった https://bytes.com/topic/c-sharp/answers/492805-enable-trackbar-doubleclick-event ダブルクリックの成立条件がOSの設定と別になるのは諦めて 自分でダブルクリックを実装するしかない気がする。知らんけど private Stopwatch mStopWatch = new Stopwatch(); protected override void OnClick(EventArgs e) { base.OnClick(e); const int maxDoubleClickInterval = 500; if (mStopWatch.IsRunning && mStopWatch.ElapsedMilliseconds <= maxDoubleClickInterval) { OnDoubleClick(e); mStopWatch.Stop(); } else mStopWatch.Restart(); } >>197 あーーやはり根本から用意されてないんですね…… 自分の初歩が間違ってるのかなと思っていたのですが少し安心しました ありがとうございます! 素人のボヤキで恐縮ですが 何度も書いては直しを繰り返し書き足したコードが 最後の最後、どうしてもデバッグが通らなくなりまして いくら調べても動かない原因か分からず もう考えるの面倒くさくなって 新規のFormに一から同じコード書き直してみたら・・・動くじゃん! たぶん何度もトライ&エラーしたから何処かで操作間違えて IDEが自動で生成したコードにゴミが混じったんじゃないかと思ったのですが この動くコードと動かないコードの違いを簡単に発見できませんかね? 今、全ての.csファイルを一行ずつ比較してますが・・・もう飽きましたwww メインのコードは全く同じでした ちなみにデバッグで出るエラーは、あるクラスのメソッドの定義が無いというやつです
定義がなくてエラーを吐くところまで分かるなら 動くほうのコードをその定義名で検索してコピペすればいいのでは……?
自作のメソッドじゃないのです usingでちゃんとクラス指定してますし 少なくとも手で入力したコードは同じなので
いや、だから自動生成のコードも比較してるんだよね 普通にそこにヤマ当てて検索すればいいのでは…………???
List<int>型をカンマ区切りの文字列にしたいんだけども一個ずつforeachで要素取り出して繋げるしかないかな?
joinをレスかいた後に見つけました! すみません
質問する際に文字に起こすことによって頭が整理されるためである
staring[] strLine = system.IO.File.ReadAllLines(tarTxtPath,System.Text.・・・) strLine = strLine[0].Split(chrCut) return strLine; フォーム1で一回通ったあとフォーム2で2回目通るときにエラーで別のプロセスで使用されているって出るんですがどういったエラーですか? ファイル開いてるってことですか?
>>208 そう ただFile.ReadAllLinesはオープンからクローズまでやってくれるので普通は発生しない 他でそのファイルを触ってない? あと自プログラム上はクローズしたけどアンチウィルスソフトがまだ触ってるってケースがある >>208 Readだとそもそも他でロックしていても別のプロセスで使用されているってエラーにならないはずなんだけど 書き込みモードで開いたままとかよっぽど変なことしていないか? >>212 とりあえずダミーで string[] strLine = system.IO.File.ReadAllLines(tarTxtPath,System.Text.・・・) のすぐ下に別の配列への読込み string[] strLine2 = system.IO.File.ReadAllLines(tarTxtPath,System.Text.・・・) を入れて見てエラーになるかならないか確認してエラーが出たらお手上げ エラーが出ないのならstring[] strLine = system.IO.File.ReadAllLines(tarTxtPath,System.Text.・・・)から2回目の実行時にエラーの原因がある Windowsで簡単なデスクトップアプリ、コマンドプロンプトアプリを作るのが目的で 無料のVisual Studio 2013 for Desktopをインストールしている 最近調べたらVisual Studio 2017 Community版なるものが無料でリリースされてるようだけど 2013 for Desktopから乗り換える価値あると思う? それとも2013 for Desktopをそのまま使い続けていた方がいい?
>>214 2013だと最新のC#や.NetFrameWorkwpターゲットにしたものが作れないと思うけどVisualStudioのスレで聞いて メリットとデメリット詳細に説明するのは難しいと思うから >>214 VS communityは商用利用に制約が有ります。 Express 2017 for Windows Desktopを利用しましょう。 Express 2017 for webはないのでwebはVSCODEに移行しました。 dd 2017 for Windows Desktopに乗り換えまつ
>>216 は間違い VS Communityは組織の規模に制限があるが用途に制限はない >>213 書き込みモードで放置してました。 お手数おかけしました! プログラマーとして転職するにはどんな本までマスターしてれば大丈夫ですか? ゴールからはじめるC#は読めました。
基礎としては入門で十分。 読んでから作るのではなく、作りながら読む。 必要だと感じないと頭に入らない。
C#ってあんまり未経験OKの仕事ないからJavaから入るのがいいと思うよ JavaならFizBuz書ければ十分仕事できる
>>221 本ならEssential C# まぁ作った物を見せるのが一番だけどな VS2013でweb formを作っています。 以前VS2008の時代、AjaxControlToolkitのModalPopupExtenderを使って設定用のポップアップを作っていました。 今回同じような事をしたいのですが、VS2013の環境で、同等の事を簡単にできるよい方法はありませんか。
>>226 WebFormsに頼るのはやめてBootstrapを使ってください リリース用のビルドマシンは1台で 他は全部expressや ってやったらどうなるの?
>オープン ソース プロジェクトへの貢献 ってすごい曖昧な定義だよな
Javaは設定ファイル多すぎて挫折したけどdotnet new mvcですぐ始められるのは良いね サーバーもいらないし
>>229 意味ない ビルドだけなら.NETさえ入ってればmsbuild一発でできる MSが委託請負が開発したCommunityでビルドしたアプリまで特定できるの?
tiff画像をBitmapクラスを使って読み込みたい 読み込みはできたのだけど、1ピクセル辺りに要するバイト数が想定と違って困ってます Bitmap b = new Bitmap(file) BitmapData d = b.LockBits(new Rectangle(0,0,b.width,b.height),ImageLockMode.ReadWrite,b.PixelFormat) b.pixelFormatがどうやらサイズが間違っているようなんだけども ここってどう指定すべきなのでしょうか 2バイトのところ4バイトのARGBが入ってるのでサイズがめちゃことなってしまって
>>233 Visualstudioのお金払う必要無いって言ってる? ライセンスの話ね >>236 ビルドだけが目的ならVSなんか全く必要ないよ >>237 回答があるようでない感じやねありがとう ファイルの先頭ポインタから何番目ってをIntPtrで変換とかはStreamReaderでできるんかな? >>238 じゃ、Visualstudioって実質金出さんでもいいの? 最近ほぼVisualStudioCodeしか使ってないわ
>>235 まずその想定してるっていうPixelFormatは正しいのかExplorerからプロパティ>詳細のビットの深さ見て確認する > 2バイトのところ4バイトのARGBが入ってる 想定とBitmapDataでどっちがどっちなのか読み取れないけど1ピクセル2バイトってRGB565とかその辺なの? たぶん直接の原因は>>237 にある通りじゃないのかな 文面を見る限り質問者はあまり注意深い人に思えないしw ところで、LockBitsってインスタンスメソッドなのに何で自分自身のPixelFormatを 引数で要求するんだろう。
GDI+のAPIがそうなっているから、それを何も考えずに猿のようにラップしてそうなっただけ
>>247 フルカラーをトゥルーカラーにしたり、アルファーチャンネルを付け加えたり、 そういうフォーマットの変換機能も兼ねてるってことなのかな MSDNのLockBitsの解説にはそんなこと書いてないけど。 不細工な設計だねw >>248 フォーマットの変換機能は別に持たせた方がスマートでしょ (現にCloneでできるみたいだし) 少なくともLockBitsにPixelFormatを引数にとらないバージョンがあってしかるべき。 GDI+はやっつけで作ったのかこういう不条理な実装他でも見た記憶があるなあ >>250 ソース元のフォーマットに制限されず指定のフォーマットで読み書きできた方が普通に便利でしょ 別のビットマップが欲しいわけじゃないのにCloneを仲介する方が意味わからん (LockBits自体は自動的に複製を作るようなもんだけどね) cbo1のテキストと同じものを3行目の3列目から右に同じものを見つかるまで探し、見つかったセルから下へループし、「※」印がある場合のみ「※」印の行の1列目の氏名を配列に入れ、cbo2にADD。 注)入れる際に同一氏名がすでに配列にある場合除外。 これをやるために、closedxmlで書いて見ましたがちょっと処理が遅い。 コードの書き方的には右にforで最終列までループ処理→ifで一致 forで一致した列の最終行まで下へループ処理→ifで一致したら配列に詰め込む。 現在ここで重複排除のやり方が分からないのでとりあえず全て配列にいれてます。 どうやって、書くのが最善ですか? >>253 格納するときに現在あるやつ全部とダブリチェックでいーじゃん >>253 低い抽象度でものを考えすぎている お前がやりたいのはExcelの操作を自動することではなくて目的とする結果を得ることだろ? まず要件を明確にし、それをそのままコードに落とすだけだ カーソルだのセルだのは最後の最後に出てくるどうでもいい瑣末な部分だ 複数の.csvファイルを一つの.xlsxファイルに簡単に纏められる?
VBAでできることはC#でも全く同じ方法でできる C#ではなく "VBA CSV 複数 結合" でググったら一発でサンプルは出てくる そして "C# Excel 操作" でググって出てきたサンプルを真似してC#に機械的に書き直せ それ以上細かいことはスレ違い
やれば出来るだろうが、手間は掛けられん。 簡単に出来るなら、ちょっと考えてみるかな。 ありがとう。
>>256 テキストの状態で全ファイル連結して一つのcsvファイルを作り、それをExcelで開いてxlsxで保存。 というローテクな方法でもできる。 >>260 普通にc#からエクセルファイル操作できるから >>262 お前の「普通に」って何だよwww 初心者用なんだしやり方を詳しく教えろやくださいませ まさかopenXMLのAPIのことじゃないよね C#のクラスを考えるときにテストのことを考えるとさ privateの関数や変数は持たない方が望ましいと聞いたんだがそこまで意識してプログラミングしてる? 役割を逸脱してる可能性が高いと言われてるのだがコード的にそうはさせない方法とかあるのだろうか
>>267 全部パブリックにしろって話ではないと思うのだが、 クラスとしてちゃんと機能してるかをテストしやすくするものとして確認しやすいように設計をするようにと言われた アクセッサを準備しろってことなのか 、protectedで作って継承してテストをしやすくしろってことなのかはわかってない >>269 たぶん本質は内部所持して扱う変数を極力減らしましょうってことなんかなって思ってる クラスを使うのにA・B・Cを事前に呼び出して内部変数の設定をしないと使えないですとかだと バグのもととかになるから条件縛りを減らしましょうとかってことなんじゃないかと 日曜プログラマです 理屈に疎いので教えてください Win32APIをマーシャリングしてプログラムを作成中なのですが コールバックをデリゲートでやってるので これは必然的にFormとは別のスレッド(マルチスレッド)という理解で正しいでしょうか? このコールバックからの信号をトリガーにForm上のコントロールを触ると 「別スレッドからアクセスした」と怒られます これを回避するために別のデリゲートを挟んでコントロールを触っていますが これ以外に方法ないでしょうか? デリゲート挟むと時々信号取りこぼすみたいで 上手くコントロールが反応しないことがあるんで改良したいのです
どうでもいいけどココって本当に初心者用スレなのかね
>>272 > コールバックをデリゲートでやってるので > これは必然的にFormとは別のスレッド(マルチスレッド)という理解で正しいでしょうか? どこのなんのコールバックなのかこっちは知らんのだが 「別スレッドからアクセスした」と怒られるんならそうなんでそ > これを回避するために別のデリゲートを挟んでコントロールを触っていますが デリゲートを挟んでとあるけど、前提としてコントロールを触る処理はInvokeメソッドにちゃんと投げてる? すみません、c#の初心者です。UnityでRPGを製作しているのですが、質問があります。 if (条件式1) { 条件式1が真の時のダメージ処理; ...; }else if(条件式2) { 条件式1が偽で条件式2が真の時のダメージ処理; ...; これに、ダメージを999以下に抑えたいので<=999を入れたいのですが、どこに入れればいいのでしょうか? 簡単な質問で申し訳ありませんがよろしくお願いします。
>>275 ダメージ処理終わった最後 int dmg=0; if (条件式1) { 条件式1が真の時のダメージ処理;dmg+=a; ...; } }else if(条件式2) { 条件式1が偽で条件式2が真の時のダメージ処理;dmg+=b; ...; } dmg=dmg>999?999:dmg;//またはif (dmg>999) dmg=999; >>276 早速のご回答ありがとうございます!やってみます! >>274 Invokeメソッドに投げるとはこういうことでしょうか? private void _TS() { TextShowDelegate dlgTS = new TextShowDelegate(TextShow); IAsyncResult ar1 = BeginInvoke(dlgTS, null); } Tipsの寄せ集めでやってるので理屈はあまりよくわかってませんwww >>271 クラス化してる意味がほぼ無さそう.... コンストラクタで引数渡してメンバ変数にデータを覚えさせて使うのと ことあるごとに内部関数の引数にデータを渡すのってどちらのが良いのだろう? 影響範囲とか小さくすることを考えると後者なのかなって思うけども >>281 あるメソッドで使うからコンストラクタで渡すって考え方自体おかしいかな メンバはそのクラスが持つ必要があるから持っているわけでメソッドで使うから持っている訳では無い 例えば体クラスでBMIを計算するときは体重、身長は体情報だからクラスのメンバで持たせる 身長クラスでBMI計算するときは身長はメンバで持って体重はメソッドの引数で渡す >>282 クラスの役割的にはそれであってるのだと思う 聞きたかったのは例えばその身長クラスに特化した話で 身長をそもそもメンバに持つ必要性はあるのだろうか?って話 何か正しいかはユースケース次第 クラス単独での設計の正解なんか存在しない
>>286 情報ありがとうございます 勉強させていただきます C#ではnumpy.randomみたいにSeed値を指定するようなことってできるんでしょうか?
とても初歩的な質問なんですが protected AbBb _abbb; こんな感じのプログラムってなんていいますか?
クソコードというんじゃない? フィールドをprotectedにしているプログラムはC#では一般的にはそう呼ばれる
>>291 なんていうか、_と書くことで別のところから持ってこれるようになる方法のことです _から始まろうがそうでなかろうがC#では普通の識別子であって言語的に意味の違いはない メタ的に意味はあるかもしれんがそれは文脈次第 なのでもうちょっと文脈を示してもらわないと意味分らん
>>294 初心者相手なんだから略してない名称も書いてあげたら 最近は可能だが案件はなさげ デバイスは限られるが自作なら余裕
>>297 案件あって戸惑ってる また1から学ばないといけないのか... C#で実務の組み込みって制御系だろ? 変なプロトコルで機器と通信する必要があるだけで、普通のWinPCだぞ
ググったら.NET Micro Frameworkってのがあるらしい どのくらい使われているかは知らん
ラズパイにwindows IOT入れてUWPで作ったり unityからUWP吐くとかもできるぽよ 従来の組み込みの世界とは別物だろけど 沼っぽいけど実績になれば キャリア的には面白いと思う
c#って何から覚えてけばいいのだろう? 今の知識としては、インスタンス化は何かnewする奴だっけ? 的なレベル、何というか世界が広大すぎるしネットで調べてもサイトは何書いてんのか分からないし……わりぃ、やっぱつれぇわ
作りたいものを作る その過程で必要なものだけを調べる 道具の使い方だけ勉強しても意味がない 道具は使うためにある
>>302 C#は後発なだけあって負の遺産みたいのが少ないから まずは自分に必要なところから覚えていけば大丈夫 やりたいことをやってるうちに疑問に思ったところを調べていけばおk そのうち道具を使う為の道具を作り始める 負の遺産が溜まっていく
ラムダ式というのがよくわからないので教えてください 読んでる入門書に例えば普通のメソッドで int add(int n){return n+2}; とあればラムダ式なら n=>n+2;と書けるとあるのですがどうやって使えばいいのか?が書かれていません どのように使えば良いのでしょうか?何が便利になってるのかも?です。
>>306 なんか色々説明が必要な時点でもうあんまよくない臭いしてるだろ? 間に合わせの説明として利便性をいうと わざわざ関数addを明示的に作らなくてもその場で関数を作れる=関数名もつけるまでもない匿名関数として便利 ついでに引数と戻り値の型も省略できるからLINQの述語やプロパティ値をシンプルに記述できる あとMVCのrazorでもヘルパーへの引数に、プロパティ値ではなくプロパティを渡すのに使われたり
>>306 書く方も別の場所にいちいち関数定義しなくて良い 読む方もそこに処理の内容が書いてあった方が良い …とも一概に言えない場面は多いので、自分がコーディングしてて 脳が「ここラムダ式で書きたい」と自然に出てくるまでは封印しててもええんやで void Do() { int buffer = {1,2,3,4,5}; var q1 = buffer.Where(Even).Select(Plus2); var q2 = buffer.Where(x => x % 2 == 0).Select(x => x + 2); // q1とやってることは同じ } bool Even(int x) { return x % 2 == 0; } int Plus2(int x) { return x + 2; } >>306 デリゲートは理解してるの? まずそっちを先に理解しないと、いきなりラムダ式を理解するのは無理ですw >>310 すいません理解できてないです というかまだ読んでる本で説明がなされていないようです… この章を取り敢えず読み切った後また読み返せば理解できるってことですね LINQとラムダ式?とやらを使わずにメソッド使えばいいやって認識だとこの先苦労しますか? 回答くださった方ありがとうございます >>311 LINQはともかく、ラムダ式は必須の知識でしょうね。 少なくとも使えるとコードの書き方に大きな差が出るのは間違いない ただ、デリゲート自体が初心者には理解しづらい概念とも思うので よく分からない場合は固執せず後回しにした方がいいかもしれないね 本質的にはそんなに難しい話じゃないから、最初分からなくても時間が解決するはず >>310 へえ、ラムダ式はデリゲートが基本にあるのか あるいは匿名メソッドを指して言ってるとか 記述が簡潔というのもあるけど肝はクロージャではなかろか
お前の知ってる言語とは限らんぞ クソ会社特有の独自スクリプトとかな
linqより理解しやすいメカニズムも無いと思うけど
ラムダ式を理解するのにデリゲートなんて要らねえのにな 一体どんな頭してんだ
タイプセーフな関数ポインタやコールバック、匿名関数で説明してるけど それで通じないと どこから説明すれば良いかたいへん デリゲートからの説明はしんどい…
>>319 Wikipediaにもいくつか乗ってるよ Linq は、Java のStream、Ruby on Rails と同じ。 関数型 メソッドチェーンしていって、一番最後にレコードを取得する。 遅延実行 ずっと、フィルター・SQL 文だけを組み立てて、一番最後だけアクセスする
>>323 元の質問が理解は出来るけど使い方がわからないって話だからな FuncやActionか、メソッドのデリゲート引数ぐらいでしか使わないしあながち間違えてない デリゲートはイベントにも使うよ そしてそれこそがデリゲートを理解しにくいものにしている最大の原因でもある
ラムダ式を何処で使うかの話でデリゲートを何処で使うかについてはふれてないよ デリゲートの使い道でいうと非同期実行するために使うとか色々ある ラムダ式に関しては、FuncやActionかメソッドの引数ぐらいでしか使ってないと思うんだけど他になんかある?
ラムダ式使ったのはfind関数のときくらいかな それ以外ほぼ使ったことない
Postgresを、SQLiteみたいにDBファイルとコネクタだけで使うにはどうすればよいでしょうか?
>>336 >コネクタだけ って書いてるからどうにもなんないよ >>338 じゃあ俺には無理だから、あんたが教えてあげたら良いんじゃないの namespace Drawlinetest { public partial class Form1 : Form { PictureBox pbox = new PictureBox(); Point pt = new Point(-1, -1); public Form1() { InitializeComponent(); pbox.Location = new Point(0, 0); pbox.Size = new Size(500, 500); this.Controls.Add(pbox); this.ClientSize = pbox.Size; pbox.Image = new Bitmap(pbox.Width, pbox.Height); pbox.MouseDown += MD; } private void MD(object sender, MouseEventArgs e) { Point p = e.Location; if (e.Clicks > 1) { pbox.Image = new Bitmap(pbox.Width, pbox.Height); return; }//ダブルクリックで画像リセット int x = pbox.Width - 1, y = pbox.Height - 1; if (pt.X < 0 || pt.X > x || pt.Y < 0 || pt.Y > y) { pt = p; return; } Graphics g = Graphics.FromImage(pbox.Image); g.DrawLine(Pens.Black, pt.X, pt.Y, p.X, p.Y); pbox.Refresh(); g.Dispose(); pt = p; } } } 前スレにあったのを参考に400角にピッチ20の方眼を作りました。 クリック時に近い点を取って連続線にしたい場合どうすればいいですか?
>>340 「近い点」の定義は? 座標差が10以内の場合を0に近いとした場合 p.X=p.X-p.X%20+((p.X%20)>10?20:0) Y座標にも同じような計算式を適用 でそのコピペしたところに組み込むときは画像範囲外の座標を指定した場合はリセットされるので、その辺も改変しないと >>340 マウス座標に一番近い格子点の座標を求める方法って意味なら、 (1) マウス座標を囲む4つの格子点を返すメソッドを書く(マウス座標が格子点上の 場合に何を返すかは適当に決めて) (2) マウス座標と任意の座標の距離(の2乗)を求めるメソッドを書く(ラムダ式でいい) (3) LINQのOrderByでも使って(1)と(2)から求められる 今気づいたけど、MSDNのリファレンス、無茶苦茶見づらくなってない? 拡張メソッドはどこで見られるのこれ? VS2010時代の人力で翻訳されたドキュメントも読めなくなってるし.... MSっていらんことする天才だなw Googleもそうだけど
「英語で読む」が付いて格段に読みやすくなったわ 英語読めない人は大変だなw
サンプルコードがないメソッドを報告するって付けてよ
chromeの翻訳は実用十分 MSDNは昔より酷いよな 英語です読むオプションが便利やね
>>340 数学の問題かな マウスの座標を20で割って商nと余りを求める 余りが0<10 x=20n 余りが10<20 x=20(n+1) yも同様にして座標が求まる 2点の座標p1,p2に線を引く これの繰り返し グリッドならわざわざ距離なんか求めずX軸Y軸独立に最近傍検索しても同じことか そりゃそうかw
>>345 コンストラクタ、プロパティ、方法、イベント 「方法」ってなんだ? と思ったらメソッドかよ! こんなクソ訳付けられるなら英語の方がマシだなwww ついにMSもバカをきりすてはじめたか いちいちバカの相手をしてたら大変だからな
あえて誰にでも間違いがわかるバカな翻訳を残すことで、 俺達はもう英語の読めないバカジャップを相手にする気はない、英語を読むか廃業しろ、 というメッセージを伝えようとしているのだろう
デバッグ用のビルドはこの設定ファイル、リリース用のビルドの時はあの設定ファイルの値を組み込みたい ってときはどうやるの
>>355 ビルドで切り替えるなら #if DEBUG で十分 Web開発で使われるような動的な設定の切り替えは、同じビルドを環境に応じた異なる設定で実行したいというニーズにおいて使用するもの Webだと、ビルドしてステージング環境でテストしてそのまま同じものを本番にデプロイするんだよ デリゲートって関数登録して好きなタイミングでそいつ呼べますよって使い方のイメージだけども違うんかね
>>357 前にも書いた気がするけど、本質はデリゲートっていう概念を導入することによって デリゲート型の変数が作れるってことだと思うよ。 C#からデリゲートがない言語を見た場合、それは デリゲートのリテラル( = メソッド)の定義は出来るのにデリゲートの変数の宣言はできない不自由な世界に見える 数作ってる内に最初の設計こそが一番大事な気がしてきた が、それで最後まで行けた試し無し
設計においては全体像を常に持ちながらもフェーズに応じて必要以上に詰めすぎることなく適切な抽象度に留めるバランス感覚が重要 厳格なウォーターフォールだろうとアジャイルだろうとそこは同じで、最初から細部を詰めようとするのは確実に時間の無駄
設計力を高める(学習)するのに適切な書籍またはサイトがあれば教えてください。
まあそうなんだけど、前工程が適当だと後工程が確実に割を食うじゃん。 どこら辺にいい加減があるんだろうな。
権力のあるところがざっくりやって、弱い連中に細かいとこ押し付ける。
ユーザーなども含めた他人の意見をフィードバックしようなどと 色気を出した瞬間、どこまで詰めるかなんて分からなくなる 結局一人で設計してどこまでやるかなんて一人で決断するしかない アプリなんて自分が使って満足ならOK
disposeを継承したクラスのインスタンスのデストラクタが参照があるときに呼び出されてるのだけど そんな現象に見回れた人居ませんか disposeの継承は関係ないかもしれないけどそのクラスの作りは今そうなってます
ありえない 今更CLRのそんな基本的なところがバグってるなんて考えられないから、バグがあるのは間違いなく貴方の目か頭の方です
>>340 これって前打った点と新しい点を線引いてるけど、前の点はどう記憶してるんですか?前の点にもう一個情報を持たすのは可能ですか? 線が被った時、線をずらして書こうと思ってるんですけど、 例えば↓2マス↑6マスとクリックして書いたとき被るのをちょっと右にずらして書くのは出来たんですけど、 条件をpt.X==p.X && pt.Y<p.Y だと変わって欲しくないときもズレる。 ズラす条件は直角で、始点を0を基点として ↓に引いた時は左 ↑に引いた時は右 ←に引いた時は上 右に引いた時は↓ >>368 >前の点はどう記憶 フィールドのPoint pt 描画範囲が被る場合の判定がちょっと思いつかないけど 前の点にもう一個情報じゃなく描画した点の位置を全部記憶してからになる気がする 線描画を半透明にして被った場合にもわかるようにとか駄目なの? >>367 ありがとう めっちゃ上位層でインスタンス破棄されてました async/awaitが難しすぎる 一見簡単そうに見えるんだけど、結構注意深く使わないとこれはまるよね (Web見ていると使い方で注意事項多いし) これって、MS的には何を目指したものなの 最初見た時は、初心者向けかなと思ったら偉い難しいのでびっくりした BackgroundWorkerなんて、結構納得しやすかったのに
そこはそんなに難しく考えることないかと 「非同期的にAの終了を待機してその後Bを実行」みたいなコードを 普通のシーケンシャルな処理みたいに書けるようにするためじゃないの?
まぁ初心者向けというか、Progress<T>等でも実装を隠蔽しつつ UIスレッドで行うべき処理を文脈的に記述しやすく…? いや、個人的にはyieldよろしく妙なコードを生成した気がするし .NET 4考慮でSynchronizationContext捏ねる方が好きだけどね
すまんが、あるクラスがインスタンス化された際、そのクラスのコンストラクターでインスタンス化した元のオブジェクトorクラスを取得することってできないの? デバッグに使いたいんで引数で渡すのはなしでたのむ
>>376 インスタンスは正攻法だと無理そうな気配がする 呼び出し元のメソッドが定義されているクラスは new StackFrame(1).GetMethod().DeclaringType 象徴天皇制の現代で国民の意見を象徴しなかったらそら叩かれるだろw
あれ?難しいと思っているの俺だけ? >>375 下の場合、基本 処理1=>test()=>処理2と逐次処理する。 test()のとこでawaitしているにもかかわらず、すぐにTestAsnc()は終了しちゃうとこ test()で止まっているのに、値も設定されず次の処理にいくとか、動作が見た目と違い過ぎる main(){ int ret = TestAsync(); } async Task<int> TestAsync() { 処理1; int ret=await test(); 処理2; return ret; } int test() { 24時間かかる処理; } >>375 ◆async void は使うな 投げっぱなしは、なんでダメやねん ◆理由は分かったけど、Waitと混ぜるとデッドロックするとこ シングルスレッド止めたら、戻ったら動かないのは理解出来る でも、async/awaitってTaskクラスを元にしてるんでしょ。 だったら、似たような動作をしてくれるもんだと… ◆SynchronizationContextとは何者? UI処理に使うのはわかった。でも、これってその為だけ? でも、一番の理由は、背景を含めてきちんと解説しているHPあるいは書籍が欲しいかな >>381 mainメソッド自体が非同期じゃねーだろそれ >>381 ,382 await/asyncが簡単だとは俺も思わんが初っ端からタイポってレベルじゃないコードが出てくると 「わかった」と言ってる部分すら疑ってかかってしまう > ◆async void は使うな わざわざ特別に許可されている構文であり使うなってことはない 使うべきではない場面で手抜きの為に採用するな、という文脈なら理解できる > ◆理由は分かったけど、Waitと混ぜるとデッドロックするとこ ConfigureAwaitまわりについては確かに直感に反する場合が多々あるが 結局のところをどちらを既定にするべきかという話になる > ◆SynchronizationContextとは何者? UI処理に使うのはただの一例。await(に限った話でもないが)の継続する処理を どこでに実行するのかカスタマイズするために自分で実装することもできる >>381 落とし穴が存在する、という意味で難しいのは確か。 非同期メソッドに限らず非同期処理は全部そうだけど >動作が見た目と違い過ぎる これは勘違い。 testの終了を(非同期的に)待機して終了したら下の行を継続するんだから むしろ見た目通りでしょ。 そこでメソッドを抜けてるわけじゃない。 ただスレッドの占有を止めるだけ >>387 >await/asyncが簡単だとは俺も思わんが初っ端からタイポってレベルじゃないコードが出てくると どういうこと? ちなみに、俺はmain中のint ret = TestAsync();はコンパイラーエラーを期待していた。 普通に実行できるうえに、test ()を待たずして、TestAsync()が終了するのに びっくりしたけど、そういう動作なんでしょ?だから分からないと >>389 >そこでメソッドを抜けてるわけじゃない。ただスレッドの占有を止めるだけ でも、test()が終了していないのにTestAsync()が終了するのはなぜ? retにはTask<int>型が入って、Result未設定になってるけど。 >>388 他の人が出してきたのは、既にざくっとだけど読んでたものだったけど これはみてなかった。後ほど見てみる。 初心者には難しというか誰に対しても理念をしっかり理解しないと使えないし それでも誤用してる人も多い スレッドの流れもわからないでいろいろバグコード作ってて後で思ったように動かなくなる それよりもTaskを使ったシグネチャーで一貫性が損なわれてるのが気持ち悪い あとから出てきた言語などではasync awaitはきれいになってたりする それまでが暗黒だったのですこし明るくなっただけでもすごく進歩してると思い込んでる
awaitは一次的に呼び出し元へ順繰りにreturnするもの
kekyoの丼は昔昔async/awaitでおかしな記事を書いてたな MVPなのにこの程度の理解なのかと思った
@座標A(50,50) 座標B(100,50) にABを結ぶ下半分の半円。 A座標C(100,50) 座標D(50,50) にCDを結ぶ上半分の半円 まず、正方形の左上、右下の座標をangleに入れ @angle=(50,25,100,75) Aangle=(50,25,100,75) @DrawArc(Pen, angle, -180, -180); ADrawArc(Pen, angle, -180, 180); これで合ってます? よく解らない点 angle座標の計算式 半円の角度の意味がいまいち分からないです。
>>391 >試したコードを貼ってくれないか? 長いソースなんでそれは無理だけど 単純に簡略化したつもりだったんだけど 実際にはmain()でなくGUI Task<int>ではなく、Task<bool>本質的には変えてないつもりだったんだけど… 悪いけど ちょっと、時間もらって 明日に仕切り直しということで >>397 お前のコードだとawaitもTaskも全く基本的な使い方すらできてないやろ 少しはドキュメント読めよ ボタン押したらクリックイベントハンドラ(メソッド)で重い処理をしてGUIが固まってしまう これを何とかするにはGUIに制御を返してやらないといけない awaitではasyncメソッドの中のどこかのレベルで新しいTaskを作って そっちで別の処理をさせて上のメソッドに制御を戻すことができる 必ずではないけどawaitに出会ったらスレッドは結果としてそのメソッドを離脱して 上位のコードを実行する awaitに出会ったらスレッドは処理が終わるのを待ってはいない!(重要) この場合はGUIに制御が戻ってる awaitの戻り値が用意できたら良きタイミングでまたGUIから処理(スレッド)をかっぱらって続きを実行させるだけ!
昔?はmainでawaitできなかった 一次的にでもmainを抜けると言うことはプログラム終了だもの
>>396 (1) まず最終的に描きたいパイをパイに切り取る前の全体の円(楕円)を考えて、 (2) その円(楕円)に外接する長方形を考える こういう順番だと思うよ DrawArcが引数に要求するのはその外接する長方形と、時計の3時からの開始位置の角度と パイの角度だと思う 使ったことはないがw 以下はよく見かける間違い awaitに出会ったらGUIに処理を渡します awaitに出会ったらそこで待機して結果が出るのを待ちます
作ったんで、書き込もうとするんだけど 書き込めない HTTP 403 Forbiddened が出る。
これって、まじなソースコードって書けないの? 全角に変換してみた public Form1() { InitializeComponent(); this.AllowDrop = true; wtest(); } void wtest() { var ret=TestAsync(); System.Diagnostics.Debug.WriteLine(ret.ToString()); } async Task<bool> TestAsync() { bool ret = false; var task = Task.Run(() => { System.Threading.Thread.Sleep(10 * 1000); ret = true; }); await task; return ret; }
半角に変換して試してw 試したのは、GUIなのでFormアプリで作ってみた で、疑問点は、 1.これがそのまま動くこと。var ret=TestAsync();でコンパイラーエラーの方が納得する 理由は、retに値が設定出来ないから。そのうえでTestAsync()呼び出しにawaitを強制するとか 2.await taskでTestAsnc()で待ちが入ると、その上位のメソッドの処理に流れが移ること 要するに流れが直観的でないと感じる。ただし、この流れはがTestAsyncがasync voidならまだ納得がいく
>>406 >>1 にリンク張ってあるideoneかdotnetfiddle使いなよ 簡単なコードならサイト上で実行まで出来るぞ 1. var ret=TestAsync();でコンパイラーエラーがでるとtaskをそのまま受けたい場合に困る retはただのTask<bool>であってそいつのResultじゃないからそれでいいだろう 2. そういう流れで処理をしたいのでawaitを使ってる それが疑問に思うならスタートがまちがってる
>>407 asyncメソッドと言っても戻り値は単なるTask<bool>だし Taskにawaitが強制されたらTaskを待つ場所を選べなくなる 動作的に言えばawaitした時点で抜けて後に再開しようとする ILSpy 3.0.1とかでasync/awaitデコンパイルを無効にして ビルド後のバイナリからメソッド内容を見てみるといい まずTask.ContinueWith()+TaskScheduler.FromCurrentSynchronizationContext()とか 従来の書き方を学んだ方が良いと思う、コルーチン的な物の前に varについてすら理解できてないじゃん なんで406でのvarが381でintに置き換えられるって思ったの?
重い処理Aをやってる最中にBもやりたいのでawait asyncを使ってる 重い処理Aの次にCをやるのとBが実行されるのを混同してはいけない
全 角 に 変 換 し て み た やべえコイツ思っていた以上に馬鹿だぞ!!! int に変換できるとか言ってたらvarで受けてるし面白すぎんだろ
初心者あおりみっともない しかも前のレスは初心者には理解できないだろ
>>409 おおっ 多分これが答えだな 納得はしていないけど、納得しやすい答えかな 例えば、2については、>>404 の >awaitに出会ったらそこで待機して結果が出るのを待ちます という受け取り方もあるけど、なぜ >それが疑問に思うならスタートがまちがってる のかな? で、この考え方に到達するに参考する書籍等は? >>416 いつも新刊の入門書をざっと見てるけど入門書でまともにawait asyncを扱ってる書籍はないよ あってもごまかしてあるか間違ってる 重い処理Aをタスクでやって同時にメインのスレッドを実行し続けるのが目的なので 上位のメソッドが引き続き実行されるのが期待の動作 awaitされた重い処理Aの続きのCが実行されるのはまた別の話
1. 順番に処理をやってるけど別の処理も同時にやりたいな A B 2. その処理が終わったらそのタイミングで別の処理をやりたいな A → C というのを書くのが従来の非同期処理だと面倒なのでawait asyncを使ってる
上の2は従来だとコールバックメソッドだったが 今はawaitより下の行のこと 従来だと処理が終わったらコールバックメソッドを実行する awaitだと処理が終わるまで待つ やってることは同じでも概念が変わって見える でもやっぱり待つと言うのと違うんだよなあ
ありがとう 真面目に答えてくれた人w 差しあたって、消化しきれていないけど なんとなく見えてきたので、よく考えてみまーす >>420 うん。awaitって、2つの意味があるんだよね。 非同期で実行する + ここで同期する(戻り値設定とか) でも、そこが分かりづらい でさらに、呼び出し元のスレッドは動く だから、呼び出し元の関数が動くということなんだろうけど Aを待ったあとにCをやってほしいのに先にBが実行されてしまう これはけしからん! というのはスタートが間違い AとB同時にやってるけど非同期処理Aが終わったらCをやってほしいが正解
>>406 > var ret =TestAsync(); retにTestAsync()が返すbool値が入って欲しいなら、 var ret = await TestAsync(); awaitではどのスレッドも待ってない 元のスレッドは呼び出し元の続きを実行し続ける 新しいtaskスレッドは実行し続ける 勝手に第三のスレッドができて待機したりしない
await Task.Run( () => { 処理A } ); 処理B とあったら、 var scheduler = TaskScheduler.FromCurrentSynchronizationContext(); var task = Task.Run( () => {処理A} ); task.ContinueWith( (t) => {処理B}, scheduler ); みたいに置き換わる。実際はもっと複雑だけど。
これでMSは何目指したの?なんて煽りするほどの相手に初心者煽りと言われてもなーって感じする そもそもソフトウェア技術でハマりやすいスレッド周りをかなり触りやすく提供してくれてる技術だと思うし、その点でMSに苦情なんて出る?
さっきも書いたけど美しくないしわかりづらいんじゃないの? 数年前はもっと理解してる人が少なかった リアルで合う人の9割ぐらいの人は誤解してたかわからないと言ってた ググって上位に出てくるいくつかのサイトも間違いを助長するような内容ばかりだったので 誤解するのも仕方ないかなって思ったなあ
>>424 なるほど 最初は、async/awaitの発想って非同期処理を同期処理のように見せることだと思ってた。 (結局これが正解なのね) Webを漁っても、元々の動機からずれていくような気がしてたんだけど、 awaitで非同期処理を挟むけど同期処理をしているものと思えば、 当初の動機との整合性は取れる。 で、async/awaitの関数は(TestAsync)と書いたものは非同期なのだから 当然呼び出し元は、そのまま動いていくと。 これで、自分の中では大きなとこの整合性はとれたのかな >>426 それは煽ってるわけじゃなくて、純粋にそう疑問に感じただけでしょうw 少なくとも他人を批判的に見る程度には自分自身も批判的に見た方がいいと思うよw >>425 BackgroundWorkerからasnc/awaitに飛んだから Taskすらまともに理解していなんだけど、 TaskSchedulerとSynchronizationContextはキーワードとし覚えてる レベルアップするために、そこを解説したものを教えてください。 >>406-407 cmd.exe とか、特定の命令を半角で書くと、5ch は受け付けない。 ちょっとした英単語の書き込みでハッキングされるとか、5ch の運営は、アホなんだろう Mango 板で、単語の絞り込みのテストができる 例えば、ドットなら、💩e みたいな文字参照を使えば、書き込める cmd💩eexe >>424 a「wait」って名前が誤解招いている感じ 16進数の2e は間違い。ウンコが表示されたw 例えば、ドットなら、10進数の. みたいな文字参照を使えば、書き込める cmd.exe
>>429 俺も純粋にvarの理解すら怪しいのにasync周りが難しいってそんなもんじゃないかな?って思っただけなんすけどね 別に批判的に見てるつもりはなくて俺もasync周りは難しいと思ってる >>434 >俺も純粋にvarの理解すら怪しいのに 逆に聞くと、varってどう誤解するの?もっとも俺はvarを誤解してるかもしれないけどw 余計誤解されるかもしれないとおもって書かなかったけど 解説しておくとすると、そこはシンタックスシュガーだと思ってた Task.Resultを返す だから、上のほうで、本来ならコンパイラーエラーを出すべきだと書いたのも そこら辺の理由 他の人も指摘してるけど、そこはawaitを書くべきだと自分も書いたのも、あるべき姿はそっちだろうと思ってたから 実際には、動かした段階で、Task<bool>なのは知ってたんだけど そこで気づくべきだった。 とは思うけど、誤解する心理とはそういうものだと思う。 ちなみに、本当にasync/awaitで知りたいのは モナドとの関わりあい F#ではコンピュテーション式で、async/awaitが実装されてるらしいんだけど どう実装されているのかが知りたい。 >>435 まずvarはシンタックスシュガーじゃないよ メソッドの戻り型を自分で定義してるのになんでTask外れると思ったの? 定義した型と違う型が返ってくるなんて言語仕様そのものからかわっちゃうじゃない asyncなんか関係なくTask<bool>型を返すメソッドを作って、その戻り値をbool型に入れるって、あれ?ってなるよね どんな環境でテストしてるのかわからんけどVSとかIDEならvarの上にマウスオーバーすれば型教えてくれるよ? >>436 >まずvarはシンタックスシュガーじゃないよ というのは、どこで判断するの? シンタックスシュガーか否かなんての 言語仕様以外の判断基準って存在するの? delegate、匿名メソッド、ラムダ式周りなんて、旧バージョンでは許されなかった 代入が普通に許されてなかったっけ? 疑問に思った全てを、MSDNで確認するわけではないよね。 >定義した型と違う型が返ってくるなんて言語仕様そのものからかわっちゃうじゃない いやvarだから定義すらしてないし、脳内変換では、boolだと思い込んでるから >どんな環境でテストしてるのかわからんけどVSとかIDEならvarの上にマウスオーバーすれば型教えてくれるよ? だから、テストした段階で、気づいていると>>435 にも書いたんだけど これは、今回の一連の質問以前に知ってた 実際には、retに何が入るのかは気になるからローカルウォッチで見た だから、コンパイルエラーの方が本来の姿だと思ってたけど… >>436 XMLDocumentにかざしたけど出ないね 具体的にはどの行がコンパイルエラーになるべきだと思ってる?
>>437 >async Task<int> TestAsync() TestAsyncメソッドの戻り値をTask<int>型と定義したのは君だよ? varは右辺から型を推論する、メソッドが○○型を返しますって定義されてるからその型になる まあvarとawaitの合わせ技で混乱すると言うのはわからん話じゃない C++でautoとPPLを絡めると俺も怪しい時があるし コンパイルが通るコードを コンパイルエラーになって欲しいと妄想したコードに勝手に改変して コンパイルが通ると主張して出してきたくだりはさっぱりわからんがw >>438 出るぞ べつに型名スペルミスしててもusingなくても出るぞ >>442 マジか いつの間にかできるようになってやがる >>440 一応、以下は煽りのつもりは無いんだけど 実は未だに混乱してるんだけどね varのとこw var ret=await TestAsync() とawaitをつけると、bool var ret=TestAsync() とawaitをつけないと Task<bool> とか、でも、TestAsync()関数内のreturn retはboolなんだぜ 混乱しないか?var ret=TestAsync()の方が、 普通の関数ぽいからこっちの方がboolぽいという見方もできるし これで最後にするけど、 多分初心者にとって誤解を与えるのは、 ”非同期処理を同期処理のように扱える” わけではないと思う。 きちんと、Taskを理解したうえでasync/awaitに入らないと、誤解する可能性があるということ awaitを魔法の言葉のようにとらえると、誤解の森をさまようってしまうって感じかな awaitできるのは、Task型に対してで決して普通の関数に適用できるわけではない。 async/awaitの書式が自然に思えるのは、Taskから入った人 そこを飛ばす人間にとっては、”非同期処理を同期処理のように扱える”が逆に誤解を与える
>>435 F#の computation expression でも let! ret = Async.AwaitTask (TestAsync()) で ret が bool になるんだが? 君には抽象化という考え方は難しいようだね そんなんじゃF#なんか夢のまた夢だぞ >>445 右辺の型が違うんだからvarによる型推論の結果も変わるだけ varの話をしてたのにawaitによる処理の話にすり替わってる retがboolだろうがなんだろうがメソッドの戻り型はTask<bool>と定義したんだろ? じゃあ疑問が出るのはメソッドの呼び出し箇所じゃなくて実装箇所じゃないの? なんで戻り型はTask<bool>なのにreturn boolでおkなんだろう?って ここにvarなんて関係ないのにごっちゃにするから話がこじれる >>445 async関数を書く立場と使う立場でごっちゃにし過ぎ > var ret=TestAsync()の方が、普通の関数ぽいからこっちの方がboolぽいという見方もできるし そんな見方はできないよ 関数を使う側は戻り値のシグニチャに従うだけだ 逆にawait式の戻り値がTaskじゃないのが直観的じゃない、と言うなら初心者視点に限って見ればまだ理解はできる とは言え型推論のvarが非同期機能のawaitまで勝手に面倒を見てしまうという妄想を まるで仕様により勘違いを誘発されたかのように語るのはお門違いだな 基礎を疎かにしているのに最短距離だけ求める欲求が強すぎるて歪んでいる varはわざわざ型名書かなくて済むためのシュガーだと思うの 当然、型が自明か気にしなくて済むくらい明瞭なコードなら、可読性も満たす 書き方で型が変わるシチュで、 変数名もretにして混乱してたら本末転倒かと
asyncが難しいことを誰も否定していないのに勝手に初心者でも理解できると解釈して、そんなことない!って文句垂れてるようにしか見えないんだよね。 基本や順序すっ飛ばして全部一気に詰め込むなんて土台無理な話なのに
そもそもawaitがTaskからResult取り出すものだってわかってなかっだけだな
あとasyncが戻りを勝手にTaskにしてくれるのも混乱のもとか
読んでてHaskellのIOモナドみたいとか思った。 asyncが>>=でawaitがreturn。 (Haskellのreturnは戻り値にIOを被せる) 実行順序がコード通りとは限らないと言う意味では遅延評価も非同期か。
一応読んでるよ〜 >>452 そこもまだ混乱してるんだけどね var tas=TestAsync() bool ret=tas.Result とすると、デッドロックするんでしょ 理由は分かってるから説明不要 var ret=await TestAsync() ならOKとか。違いがわかりづらい >>454 あ、asyncとawaitの>>=とreturnの関係逆だった。 要するにさ。 時間かかり過ぎる処理がUIスレッド占有するとプログラム上正常でもユーザーからは固まったように見えるから、非同期でUIスレッドから切り離してしまいましょうって機能でしょ? asyncで別スレッドに切り離して、直後のコードで押したボタンとか無効化しておいて、答えが返ってきたら有効化する。みたいな。 (だからUIスレッドは他の操作もできるけど、await付きメソッドは(async部分以外は終わってるけど)async返るまで正式な終了では無い。みたいな。 んで、UI弄るのはUIスレッドのみって縛りを解決する為にSynchronizatrionContextがあると。 齧った限りはそんな理解。
何もドキュメント読まずに妄想だけでコーディングしようとするからこんなアホが生まれる
>>446 まあ気持ちは分からんでもないけど、「非同期処理を同期処理のように扱える」なんて 宣伝してる人はいないよね。 大概の記事は「同期処理のように<書ける>」となってるんではないか。 違うかもしれないが、あなたはasyncで修飾されたメソッドの内側の視点と、 外側からの視点の区別がついてないんじゃないか。 「同期処理のように<書ける>」というのは、あくまでasyncで修飾されたメソッドを 書いてる時の、内側の視点に立った場合の話。 先にTaskをある程度知らないと混乱するのはその通りかもしれないが、 知らなくても「async/awaitの書式が自然に思える」とは思うけどな >>455 に書いてるような落とし穴が分かりづらいのはその通りだしたぶん大方が同意するところ。 だから非同期メソッドは糞、と言いたいならそれはないんじゃないかと >>460 そしてそんな池沼解釈を自慢げに広めて馬鹿の量産を狙うんだよな マジで害悪 C#に関しては特にそうだけど、QiitaとHatenaは検索から除外したほうが良いよ
>>464 qiita助かってるよ javascript関連かなり助けてもらった めるか機械翻訳に慣れているなら stackoverflow英語版見に行けばほとんどのことは書かれていると思うよ
Dispose(); リソースを解放ってどういう意味ですか?
デバッグ時にスレッド数分のウィンドウが出て 一斉かそれぞれでステップインしていけたりしないかなあ
頭ワルイヤツが頭ワルイ日記を読んで ネトウヨやパヨチョンや放射脳になる コレと同じ タチがワルイ頭ワルイのが量産される コレは低学歴知恵遅れに顕著
c#に限らずググって見つかったページを鵜呑みにするだけならキータだろうがハテナだろうがダメに決まってるだろ。
配列について。 例えばクリックイベントが起こるたびに配列に1つずつ入れたい時、使いたい1次元配列を宣言して、要素数を1つずつ増やしたいときってどうすればいいですか?
一番上のパブリックで宣言時はやっぱ一個は確定でつくるものですかね?
>>473 whileの代わりにイベント使うと考えればおk 可変長なら配列じゃなくてList<型>を使えばいいよ
ああごめん 間違えて書き込んじゃった いいレスしてるなぁ抽出しようとして
質問します。 C#初心者。プログラミング初心者です。 よろしくお願いします。 csvファイルがあって中身は a,b,c,d e,f,g h,i,j,k,l,m,n のような 行によってカンマの数(1行ずつ読み込んで配列に入れた場合は要素数)が違います。 プログラグの処理としは このcsvファイルをの内容を1行ずつ読み込んで xmlまたはjsonファイルに変換したいのですが どのような処理をすれば 行によって要素数が異なるこのデータ達を 変換できるでしょうか? よろしくお願いします。
Splitメソッドで配列に格納するところまではできてますが、その後の要素数の異なる配列を xmlやjsonの要素に入れる際の処理のコードが腫れ上がって困ってます。 配列の要素数のパータンに応じて If (配列の要素数=3){…} else If(配列の要素数=4){…} else If(配列の要素数=5){…} のように 配列の要素数に応じてコード量が 多くなってしまいます。 他に処理の仕方はございますか?
If(3<配列の要素>7){ オブジェクト名.xmlのタグ名1= 配列名[0]; オブジェクト名.xmlのタグ名2= 配列名[1]; オブジェクト名.xmlのタグ名3= 配列名[3]; オブジェクト名.xmlのタグ名4= 配列名[4]; オブジェクト名.xmlのタグ名5= 配列名[5]; } のようにすると 配列の要素数とxmlのタグ数が違う場合にエラーがでてしまいます。 例えば上記のコードだと 配列の要素数が5以外の場合はエラーになります
>>483 入力データフォーマットはわかったので 出力データフォーマットを書いて見てください それが曖昧だからどうやったらいいかわからないんじゃない? ルコード namespace Sample.model { public class PersonModel { /// <summary> /// ID /// </summary> [System.Xml.Serialization.XmlAttribute("id")] public String ID { get; set; } /// <summary> /// 名前 /// </summary> [System.Xml.Serialization.XmlElement("firstname")] public String FirstName { get; set; } /// <summary> /// 苗字 /// </summary> [System.Xml.Serialization.XmlElement("lastname")] public String LastName { get; set; } /// <summary> /// 誕生日 /// </summary> [System.Xml.Serialization.XmlElement("birthday")] public String Birthday { get; set; } } }
ファイルを読み込み処理 . . string data =1行ずつ読み込みこんだデータ; string xml[]= data.Split(,); /シリアライズする為のPersonsインスタンスを生成 Sample.model.PersonsModel model = new Sample.model.PersonsModel(); model.Persons = new List<Sample.model.PersonModel>(); //インスタンスに値を設定 // Persons1 Sample.model.PersonModel person1 = new Sample.model.PersonModel(); If (3<配列の要素数<8){ person1.ID = data[0]; person1.FirstName = [1]; person1.LastName = [2]; person1.Birthday = [3]; model.Persons.Add(person1); } //出力先XMLのストリーム System.IO.FileStream stream = new System.IO.FileStream(@"D:\DATA\EXPORT.XML", System.IO.FileMode.Create); System.IO.StreamWriter writer = new System.IO.StreamWriter(stream, System.Text.Encoding.UTF8); //シリアライズ System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Sample.model.PersonsModel)); serializer.Serialize(writer, model); writer.Flush(); writer.Close();
>>483 var data = File.ReadAllLines("path/to/file.csv") .Select(line => line.Split(",")); var jsonText = Newtonsoft.Json.JsonConvert.SerializeObject(data); person1.ID = data[0]; person1.FirstName = [1]; person1.LastName = [2]; person1.Birthday = [3]; model.Persons.Add(person1); } ここの処理に困っています。 この場合は読み込みだデータの配列の要素数が4以外の場合エラーになります。 エラー原因は要素が4未満の場合は 指定したxmlのタグの数に満たないためだと考えられます
間違えました data[0]ではなく xml[0] でした
>490 ご指摘ありがとうございます。 要素数が異なる配列を xmlタグ要素に入れる処理の ご指摘を頂けると幸いです。 読み込んだ1行のデータの配列の要素が異なる場合の処理はどのように書くのがスマートでしょうか?
>>491 要素が足りない場合に、Birthdayなどをどう書き込むべきかによる 何かしらの既定値を書き込みたいなら string GetOrDefault(string[] xml, int index, string defaultValue) { if (0 <= index && index < xml.Length) { return xml[index]; } return defaultValue; } のような補助メソッド作って person1.Birthday = GetOrDefault(xml, 3, "1000/01/01"); のように取得する 要素が足りない場合にはBirthdayなどを書き込まないなら xml出力の方では、PersonModelクラスのメンバーにDefaultValue属性を付けて その属性で指定した値を格納しておけば書き出されなくなる JSONの方も同じように書き出さないように出来ると思う >>493 サルなの? 仕様も決めないでどうやるもこうやるもねぇよ じゃあ、全部key,valueでいいよ csvに存在するすべての要素をkey,valueで出せ keyのフォーマットはcolumn-rowな xmlでのタグ名はdata 属性はkeyとvalue >>493 var persons = File.ReadAllLines("file.csv") .Select(line => { var a = line.Split(","); Array.Resize(ref a, PROP_COUNT); return a; }) .Select(a => new Person() { ID = a[0], Name = a[1], ..., LastProp = a[PROP_COUNT - 1] }); var json = JsonConvert.SerializeObject(persons); jsonって名前=値ペアの連想配列は順序が保証されないので 順序を保証したい場合は配列で囲って [{名前: 値}{名前: 値}] みたくすると思うんですが、 データ保存用途として見た場合使い難くないですかね? シリアライズした時も処理系によって順序が保証されないから単純diff比較も使えずパースして比較する必要がありますよね これって問題にならないんですか?
つか、シリアライズした結果がいつでも同じだと思うのか?
>>498 テキストだからdiffしたいって言うのは割とよくある要望 たとえばweb屋なら画面のチェックボックスとかの状態をjsonでデータ管理するとして そのデータから設定仕様書とかを起こす時に困るんじゃないかな なんかここだけアルゴリズム依存で時代と逆行してるような気がしてイマイチなんですよ
なんかよくわからないけど、このJSON君はお金出して誰かに作ってもらったほうがいいんじゃねえの?
JSONがイマイチだというお前の小言にこのスレはつき合わなければならないのか? C#に関係ないんだが
俺もjsonはイマイチだと思う 要素があるのかないのかわからん
c#とオブジェクト指向の勉強にオススメの本ありますか? 今まで組み込みのcばっかやってきたので、こっちの世界の定石みたいなものを身に付けたいのです
>>508 1冊ならAdaptive Code C#実践開発手法 >>491 jsonいじらないと細かいことわからんけど while とswitchつかうとか? 繰り返す回数はxml.length i=0の場合はperson1.ID=data[0] エラーは配列が存在しないから出てるんじゃね public List< string > textsplit(string strdata) { var ls = new List<string>(); ls.Add("1"); ld.Add("2"); return ls; } 関数内部でNewしてそれを戻しても問題ない?
ガベコレの無い言語だと、作った人が解放する掟に反するから、ひと悶着あるんだよなw
スタックに自動変数で確保した領域のポインタを返すのは普通はバグだよね C#はそれが起らないから問題ない
>>516 そっちは、レジスタ渡しされるから無問題だったりする。 まあ、コンパイラによるがな。 これがアウトなら、C言語のmalloc関数等は存在そのものがアウトという理屈になるな
戻した後で使うんだが使うのが翌日になっても大丈夫? 1日に一回だけUPする場合、そういう可能性がある。そのときにガベージコレクション されて無くなってるってことない? 関数を抜けてるので。
>>519 関数抜けてても戻り値受けてる変数がいきてるならガベージコレクションの対象にはならないんじゃね? 翌日だとアウトになるような仕組みなら1秒後でもアウトになる可能性あるじゃん
Listみたいな参照型は実体はヒープに確保されてスタック上にあるのはそれを指すポインタだけ ガベージコレクションされる可能性があるのは関数を抜けた時ではなくそのオブジェクトへの参照が1つもなくなった時 親関数が戻り値を受け取る事で新たに参照が出来るので、子関数が終了しても消えない
>>523 違う。それで済むならGCなどという大層な仕組みは必要なく、単なる参照カウンタで十分。 循環参照の場合は、オブジェクト参照まだ残っていてもGC対象となる必要がある。 正しくは、GCされる可能性があるのは、スタックまたはstaticフィールドから参照を辿れなくなったときだよ。 >>516 その為のstatic。 static付いたローカル変数はスコープはローカルだけど、 寿命はグローバル変数と同じ、宣言されてからプログラムの終了までになる。 >>525 その為、ではないと思うけどね 少なくとも普通は。 ポインタを返すためにstaticにするってそれはないっすわw そもそもCの話をしてるわけでもないですし >>520 そう、アセンブラレベルで見ると、戻り値はR0レジスタとか決まってたりする。 なぜARMの呼出規約みたいな話が出てくるのか ヒープへのポインタでスタックすら関係ないし
Methodを渡すのになんでFunc<string,int> fnc みたいになったの? string Func <string> fncの方が分かりやすいと思うが、、
>>526 ポインタや参照返してたらC#もCも危険性変わらんよ。 ガベコレされるまで危険なのは同じ。 と言うかポインタは普通返さない。 void関数なりメソッドで入力用のポインタ(参照)と出力用のポインタ(参照)を引数に取る。 >>531 そんな記法C#には存在しないし、入れ子の場合はどうすんのさ >>532 何を言ってるのかさっぱり分からんけど>>518 >>528 の人もなんか勘違いしてるっぽいので論点整理 char *int_to_str(int x) { char buf[20]; sprintf(buf, "%d", x); return buf; } これのどこがマズいか分かります? >>511 の人はこれと同類の落とし穴がC#にもあるのか心配してると思ったわけ >>534 return抜ける時にchar[20]が消えちゃうんでしょ? んで、そう言う時にreturn抜けても消えないのがstatic char[20] >>534 それじゃあ>511と問題が違うだろw だから、ポインターの戻り値なんてレジスタで帰るから気にすんなって話。それにnewしたオブジェクトはヒープに取られるんだから、スタックだって気にしなくていいぞ。 んで、今度は呼び出元全部がchar[20]と同じに(1回目も2回目も2回目と同じ値に変化する?)なりかねないので、通常 void int_to_str(int x,char* str) { sprintf(str, "%d", x); } と言うふうに、出力用のポインタ引数用意する。
>>536 言ってること同じやん( ´Д`)y━・~~ >>537 だからレジスタで返るとかそういう問題じゃないんですがw 問題が違うのは当たり前w だから、C#にも>>534 と同類の落とし穴があることを心配しているんじゃないかなと思って >>516 みたいに書いたわけ もちろん別のことを心配してるのかもしれん。 >それにnewしたオブジェクトはヒープに取られるんだから、スタックだって気にしなくていいぞ。 だから最初からそう言っていますw たぶん>>537 の人はポインタと左辺値の区別がついてないんじゃないのかな。 これはポインタって言葉の使い方が混乱してるからしょうがないけど それともそもそもスタックとかポインタの意味が分かってないのか C#のnewに相当するのはC++でもnewだし、C#でもstackallocでスタック配列は可能 しかもローカル変数のアドレスを取得し返すコードもunsafeならビルドできる 返すものが抜けるスタックだと不正なのはレジスタも呼出規約も言語も関係ない C++でもお行儀はともかく適切にdeleteすれば済むし、C#ならGCが回収するってだけ >>531 戻り値たるintとかどっかいってる上に奇妙な文法増えちゃうよ >>541 言い過ぎだとしても、>>538 的な方が普通な気がするが。 試しに普通のポインタ返す関数を。。。とここまで書いて関数ポインタ思い出した。 でも通常かと言うと疑問。 組込関数にもあるけど、それを通常と言って良いかどうか。 それと同じ仕組みの関数作るのが通常とは思えない。 ピクチャーボックスに書いた線の座標を配列にいてれおいて、右クリックの時に一つ前に書いた線を消したい時って再描画させるにはどうしたら出来ますか? 配列の最後を消して配列要素分ループして書いても書けず、前の書いた線が残りっぱなしでやり方が分かりません。
>>545 再描画する前にピクチャーボックスを掃除しているか? 再描画処理が正しいか? >>546 線色変えたら同じ線上にかかれてました。 しかし、前に書いた線が消えません。 どうすれば消えますか?一回全てクリア? >>547 線を書くときに上書きされた背景などの部分も含めて書き直す。 >>545 なんか、何回も同じようなこと聞いてない? private void pictureBox1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) pictureBox1.Invalidate(); } そんで描画処理はPaintイベントに書く Windowsの描画の基本は、他のウィンドウが重なるなどして描画した絵が消されたら (無効化されたら)その都度再描画。 プログラムの都合で再描画が必要な場合がInvalidate()等を呼んで強制的に無効化する。 PictureBoxは無効化されたら自動で背景色か背景画像で塗りつぶされるはず。 だから前に書いた線を消す必要はない XORで線引くと、もう一度XORでなぞると元に戻る。 これなら古いのを再描画する必要がない
XORはグレー背景に弱いから真面目に線引くこと考えた方がいい
メモリ上にビットマップ展開、そこに描画して画面はメモリ上のビットマップを表示するだけ。 画面の大きさ分のビットマップでメモリ喰うけど、再描画に時間取られない。
前に画面の選択範囲のスクリーンショットとる機能作った時に一番苦労したのが 選択範囲を示すための四角の点線をうまく表示することだったわ
今はテクスチャだから四角形プリミティブ重ねればいいのだけ。
>>555 553が言ってるのはXOR描画じゃないの? Win9x時代はエクスプローラ等でアイテムの選択状態を表す時や、>>554 が言ってる ラバーバンドの簡易的な実現方法として利用されてたと思う リソースが貧弱だった時代に高価なビットマップを保持するなんて愚策を 定番にしていた人がそうそういたとは思えんね それやってたの、即時モードの描画が理解できなかった、98時代のおじさん だけだと思う っていうかWin32ってもう20年以上歴史があるんだからいい加減>>552 みたいな 発想は卒業したらどうなんだろう これ、WPFみたいな保持モードの考え方と全然違うよw Direct2Dとかだっけ。 触った事ないなぁ。。。 ペイントっぽいアプリとか程度だったら、どっちが楽なんだろ。。。
>>557 ううむ。そうか。 でもウィンドウが重なったらXOR以前に再描画するものが消えてるんだが。。。 確かに翁とか愛称ついてるあたり古い考えの人だった気もするが、当時でも有効だったなら 今では解像度はタブレット以下が多い割にメモリ積み放題だし、昔より手軽な割に有効だと思うんだが。。。 あ、WPFが別物ってのは理解出来る。 とはいえ、ペイントもどき作ってないからどうだろ。。。 HTML5のCanvasの仕組み次第だな。 少なくとも、Formsでは今でも有効。-> >>552 画像描画の話題そのものはいいとしてコントロールの描画とImageプロパティへの描画と画面への描画の区別がついていない人がいる気がする 元の質問は「初期化しろ」で終わっているからどうでもいいんだろうけど
VIDEO こういうソフトってc#ですか? pythonではきついですか >>562 プログラム言語というより、数学の知識があるかないかじゃない?幾何学とか、行列とか それを踏まえて、Windowsで動かしたいならC#の親和性が高いし、 UIをブラウザにしたいならC#でなくてもいいし。
>>562 こういうのはアルゴリズムが全てで、言語なんかどうでもいい 言語云々言ってるレベルの人には遠すぎる目標だから、いったんもっと手前にマイルストーンを置いたほうがいい 確実に挫折するから 言語は何でもいいんですね じゃあC#で頑張ってみます フィボナッチなんとかでしたっけか
>>562 無理だろう リンクを開いたら『かっぱ寿司』のCMだった 寿司は握れない >>566 勘違いさせてしまったようだが、これを作れるレベルの人なら言語の選択なんか全くどうでもいい些細な問題だという意味だぞ GUIが一通り使えて3Dのレンダリングができるなら作れるっちゃ作れる であれば向いているのは、pythonよりはc#ということになりますか?(ただのイメージですが)
openGLなら素直にCとかC++使った方がいいとは思う できるできないじゃなくて初心者なら単純に調べ易さが大事やろ
c#でdirectxやopenGlを使うのは一般的ではないということでしょうか? cとかc++は超難易度が高いと聞くのでどうなのかなと思ってました
C#ならUnity3D使えばいい できるどころではなく、現代において3Dプログラミングをするなら最も初心者が入りやすい選択だ
>>571 最近は知らないけどあくまでC/C++用ライブラリのラッパーがあるだけだから 変なところでつまづく可能性あるのがつまんないじゃん 実装が中途半端だったりするのもあるから webに転がってるサンプルがそのまま動いた方が楽やろ C/C++は深みはまれば無限の闇だけどシンプルに使う分にはなにも難しくない だって大半のプログラマはCから入ってるんだし Unityは全く知らんからその辺は別の人に >>572 あくまで1から作ってみたかったので 後ゲームエンジンはgodot使ってたりします >>573 じゃあCから入ってみます asp.net core 2.1 MVCの検証属性 Javaだと検証属性にgroupsを設定できるのだがasp.net coreには同等の機能は存在しない?
>>576 押したボタンによって検証定義を変えたいのだけど検証のグルーピングって他に使い道あったっけ? >>577 諦めてFluent Validationとか使えば コーディングしてて思うけど変数名とかつけるのがめちゃ難しい dataとかinfoとか抽象的で何を指してるのかわからんようにならないように 意を示すような単語を探したいが探しきれない csvファイルを読み込んだバイナリデータを受けとる変数名とかstreamって名前にすべきなのか?
>>579 日本語のカタカナのアルファベット表記でよい お前の脳みそがなんの辞書も持ち合わせていない雑魚だった場合 全クラスの全変数の数分その都度エキサイト翻訳にかける工数が必要になる 1000個以上あればもちろん1000回以上だ つまり、雑魚なお前はそのくだらん作業で工数の大半を食い潰す 日本語アルファベット表記で妥協しろ >>579 変数名で悩む前にスコープを短くすればいいのでは? >>579 変数名は変数管理台帳に登録してあるのしか使っちゃだめだよ 業務データを扱ってて直感的に理解したいときには変数名を日本語にしてる。 エディタ操作面で色々不便だけど。
名前以前にそもそもパブリックメンバにタプル使うなってガイドラインがあったはずだけど、もうMS自身が破って解禁されちゃうのか 引数のデフォルト値なんかも当初はパブリックメンバには禁止だったはずだけどMSが平然と無視し始めて完全に形骸化したね
>>585 TupleとValueTuple混同してないか? >>579 自分で書いているように抽象的な名前であることが可読的でない原因。 そうであればベタベタに具体的な名前を付ければいいでしょう 例えばアップルの株価ならstockPriceOfAppleとか 必要もないのに冗長な名前を付けることはないけど 必要ならたとえローカルでも長い名前を付けることを躊躇してはいけないと個人的には思う IEnumerableの変数名は散々迷った挙げ句に複数形にしちゃうけど、良い名称あるのかな
>>582 職業ノンプロだけど、変数管理台帳とかまじであるの? ちなみに日本語変数とか、一般的な企業のコーディング規約で引っかからない?
扱うデータの複数名をつけるけど スコープ短い汎用的な変数名なら list, items, resultsあたりをよく使う
>>591 組み込み系からやってる会社なら必需品だぞ。 初心者だけど、変数を引数に渡した先の変数名はいつも困る。
>>596 当たり前だろ。 スタックサイズの計算に必要なんだから。 >>579 >csvファイルを読み込んだバイナリデータを受けとる変数 はstring配列やbyte配列だと思うけど 固有の型へすぐ変換するだろうから、その短い間ならdataなどでいいんじゃないか 個人的にはstreamという変数名ではSystem.IO.Stream型だと思ってしまう >>591 当然だろ。プロジェクトを示す3桁のアルファベットと5桁の数字で構成される変数名しか使えない。 オープンクローズの原則ってファクトリーパターン実装していたら拡張側は知らず知らずの内に実現していた...??
Guid.NewGuid()で生成したIDが幸運にも重複してシステムをバグらせた人いますか?
var禁止の会社でうっかりvar使ったのいっぱい書いちゃったのだが一括でなおす方法ってある? ちなVS2010
new deleteの呪縛から解放されたと思ったのもつかの間、 今度は簡略化し過ぎて気づかないopen closeの罠が沢山散りばめられたw
>>615 レビューしてやってもええけどどのくらい率直に言ってもええんや? メンタル強い方か? >>615 ここの住人はマウンティングするだけだからやめておけ >>615 そういうのは質問じゃないんだから相談室でやってくれ string.Format などで使う {0} みたいなのよ呼び方って「プレースホルダー」で合っていますか?
C#はJavaみたく1ファイル/1クラスじゃないけど 皆さんどうしてます? 短いクラスがいくつかあるとき1つのファイルにまとめます? なんかファイルが多いと読みにくくなるような気もするし 分かれてる方が分かりやすいって人もいるのかな?
>>623 試行錯誤しながら開発してる時は同じファイルに複数クラス書いて、後からバラす インターフェイスと実装クラスが一対一で、かつ量が大したことない場合はひとつにまとめたり >>623 基本的にはフォルダ分別だけど、json受信用とかのフィールド定義だけなら1ファイルにまとめちゃうかな。可読性が上がる。 >>623 俺は仕事なら余計な裁量入れるのが面倒だから機械的に1ファイル1クラス 個人的に開発するときは自分が見やすい程度に纏めることもある 基本は1ファイル/1クラスで まとめるのは特別な事情ってのが多数なのかな ありがとうございました
あとはEnumとその拡張メソッド定義クラスとかもまとめるかな
1ファイル1クラスって見積の事情じぁあねーだろな?
VSからクラスやインターフェース作成すれば1クラス1ファイルが基本だと判ると思うけど
>>631 そういうことを質問してるんじゃないだろ >>630 まあこれは半分冗談なんだけどさ、リファクタリングしてコード短くしたら見積もり下がるじゃねーかと先輩に怒られたとかそーゆう話をネットで見たことがあるのでね。高くするためにファイル数増やしてるなんてことない?って話 >>633 LOCでの見積もりはわかるが、ファイル数ってのは初めて聞いた >>635 ファイル数増やせばヘッダーにテンプレコメント書いたりして結果的に行数増やせるってことじゃないかな? ファイル名とクラスが対にしとかないと保守がめんどうだね
>>638 コメント以外だって増やせるよね?そんなとこ気にすんの?w >>640 具体的には何? それを見積もりの根拠としてカウントするものなんだよね? >>641 usingもnamespaceも使わないの? どんな小さなclassだってそれなりの規模の中に入れればそれなりの行数消費する class辺りの最低行数を上げれば見積もりだってあがるだろ? こんな細かく説明必要なの?こんなどうでもいい内容で? >>642 usingやnamespaceごときが見積もりに有意な影響を与えるようなプロジェクトなんかやったことなくてごめんね 言い負かされて悔し紛れの捨て台詞 w 誰のこととは言わないけど
>>639 そのほうがSCM上扱いやすい ファイル一覧からクラス探しやすい conflictマージが楽 プロジェクトチーム内でPG毎に好き勝手にやると一貫性がなくなる といったところかな とはいえ結合の強いクラスとかパラメーター系のクラスは一緒にするけども >>646 > そのほうがSCM上扱いやすい 理由が書いてない > ファイル一覧からクラス探しやすい IDE使ってないのか? > conflictマージが楽 変わらんと思う > プロジェクトチーム内でPG毎に好き勝手にやると一貫性がなくなる 予め決めればいいだけじゃないの? >>647 じゃあ1ファイルにする合理的な理由はなに? >>648 別に1ファイルにしろなんて誰も言ってないと思うが… 適当にまとめた方が扱いやすいだろって話な そもそもコード量で見積もりするようなプロジェクトやったことないけど namespaceやusingって独自でフレームワークレベルまで全部構築するような大きい案件のほうが無駄に行数稼げそうだなーって感覚 そもそも見積もり上での影響の大きさなんか話題になってないよね どうでもいい糞ルールで売上1%あがりましたー、みたいな話じゃん 広い世の中、そんな案件もあるんじゃないかなー?って思っただけでなんでこんな噛みつかれるんだ?
>>651 それJavaじゃね?C#ならnested class ちゃんとした名称知ってる俺スゲーってか? そこまでしてマウント取りたいものかね w
c#でもインナークラスと言って間違いちゃうよ 公式でもね
むしろnested classなんて聞いたことないわ
Javaだとメソッド内でクラス定義できるからネストだと意味的に不自然なんだよ
>>652 >>657 こいつ多分勉強出来ないタイプ。 C#の関連書籍にはnestedclassなんて単語は出てこない。 更に用語で検索するとむしろjavaよりの言葉であることが判明。つまり、にわかの誤った認識でドヤ顔しちゃう可哀想な典型。以降スルー推奨 >>658 さすがに可哀想だから教えておくか C#だとユーザー定義型はクラスだけじゃないから、用語としてはclassよりtypeが好まれるの nested types でググってみ? 間違ったことに突っ込み入れて訂正して「マウンティング」とか無いわ 違ったこと言い続けるアホならともかくこの件は>>660 で終わっているし だよな。普通に訂正、反論するだけでなんでもかんでもかんでもマウントはないよな。 喧嘩ごしでやってるならマウントって言ってもわかるけど。 だから>>652 は別にマウントでもないな。まあ細かいとは思うが 初心者向けC#のサイトでGUIプログラムの例があったので入力してみました。 しかし using System.Windows.Controls; でコンパイルエラーになります。 Controlsなんてネーヨ!エラーです。 正しくは、どこでしょうか? ちなみに環境なんですがubuntu16で、MonoDeveloperを使っております。
どうでもいいけどインナークラスなんて使うなよ 未来は誰にも予想できない
Guid.NewGuid()が重複した人いますか?
>>669 他人の満足とか他人の心配より自分の馬鹿な頭心配しとけよw 2点ほど、 pictureboxに書いた線やらマルやらを書き終えたらボタンを押しもう書けないようにロックするにはどうしたらいいですか? フォーム2で書いたpictureboxの絵をボタン投下時にフォーム1に同じ絵をコピーしたい場合はどうしたらいいですか?
>>674 最初のはpicturebox.Imageを書き込み不能にしたいってこと?そっちはわからない 2つめのは用途による picturebox2.Image=picturebox1.Image;//これは1を書き換えるとそのまま2に反映される picturebox2.Image=new Bitmap(picturebox1.Image);//これはいわゆる普通のコピー ImageがBitmapでなくMetaFileならこれは使えないけど >>675 おまえの被害妄想の方が心配だわw どうやったら>>652 がマウントとかそこまで卑屈になれるかww それ以前に >>1 を読めよ。 >なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 マウンティングか否かの議論を相談室送りにしてもあっち困るだろ
>>676 にキャスト不足とか誰も突っ込んでくれないw >>674 Form1で書いたpictureboxの絵をボタン投下時にForm2に同じ絵をコピーの例 https://ideone.com/ifdvrf Visual StudioでC#の新しいプロジェクトを作って自動生成されたcsを全部消して代わりにダウンロードしたcsを既存の項目として追加して実行 Form1ではマウス左クリック+ドラッグで描画、Form2でCopyをクリックするとその時点のイメージをコピー Enableのチェック外すと描画中止 何だかんだでc#の勉強を始めることになったんですけど、なにぶんそういう知識はまるで無いのでどう勉強したらいいかさっぱりです とりあえず初心者向けの参考書とc#を打てるなんちゃらスタジオがあれば大丈夫でしょうか
>>684 自分に合った参考書やサイトを見て勉強しながら VisualStudioで試行錯誤しながらやっていくしかない 自分の周りにC#について教えてくれる人がいるなら どんどん聞いて吸収していくのが一番いい とにかくサンプルコードを打ち込んだりしながら 想像力を働かせて覚えていくしかないよ そのうち視界が開けて来て作りたいものが作れるようになる 作れるようになったらまず、簡単なものからにするべき いきなり難しいものを作ろうとすると潰れるよ(天才なら別だが) アラーム時計やカレンダーや画像ビューアあたりから始めるのがいいと思う >>685 ありがとう、帰りに初心者の自分に合いそうな優しい参考書を買ってみるよ。 とりあえず基礎からみっちり覚えることにするね コンソールアプリにてコンソール自身へのIME制御はハードル高いのでしょうか? ひらがなモード、半角英数モードをコンソールアプリ側で切り替えたいと思い色々ググって試してみたところ、うんともすんとも行きません 大人しくFormアプリにするべきなのでしょうか
簡易HttpServerを作りたいのですが、以下のコードを実行してアクセスすると、"GET"が2回コンソール出力されます。 クライアントからのGETは1回しか受信していないと思うのですが、何故でしょうか。 https://ideone.com/Nr02QL 内容は分からんがConsole.WriteLine以外にOutputStreamのどれかがコンソール出力してたりはしないの?
ブラウザでアクセスしたら最初の1回はfaviconリクエストが追加要求されたりするけど RequestのUrl確認した?
マーシャリングが面倒でも負荷の高い処理はC++とかで組むべき?
>>690 おっしゃる通り、faviconリクエストでした。 本当にありがとうございます。 >>692 劇的に効果あるなら マルチタスクにしてもいいし、GPGPUとか、openCL(作り方によればCPUでもGPUでも動かせるし、併用でフル実行させるとやりきった感半端ない)とか今なら色々あるよ >>692 まずはアルゴリズムの改良を検討する スクリプト言語だとCPUバウンドな処理はC++に比べて数桁遅いから、 許容範囲の処理時間を達成するためにはスクリプトのままアルゴリズムの改良を頑張るよりもC++で力技の方が結果的に早い(速い、ではない)ことも多い 一方C#はせいぜいC++の数倍のオーダーであり、その程度ならアルゴリズムの改良によって簡単に逆転する 夢の最速目指すよりも 仕様決めないときりがないしな
SecureStringは使うなって書いてあるんだけど じゃあ代わりに何使えばいいの?教えて
HANDLE CreateFile( LPCTSTR lpFileName, // ファイル名 DWORD dwDesiredAccess, // アクセスモード DWORD dwShareMode, // 共有モード LPSECURITY_ATTRIBUTES lpSecurityAttributes, // セキュリティ記述子 DWORD dwCreationDisposition, // 作成方法 DWORD dwFlagsAndAttributes, // ファイル属性 HANDLE hTemplateFile // テンプレートファイルのハンドル ); lpSecurityAttributes 取得したハンドルを子プロセスへ継承することを許可するかどうかを決定する。 個プロセスへの継承とはどういう意味なのでしょうか
ここでWin32とかの話はスレチだわな。 セキュリティ記述子の話をすると、所有者セキュリティID, グループSID, 任意 アクセス制御リスト, システムアクセス制御リスト, アクセストークンの話で本が書ける。無難にNULLを入れとけばよい。 C#だとSystem.Intptr.Zeroだな
子プロセスの継承の例は、パイプを使ったプロセス間通信とかでしょうね。 以上、スレチごめんなさい
pictureboxの中に400☓800の四角を書き、線ボタン、丸ボタンを作って、それを投下したら四角の中に絵を書いくもの作りました。 @データ番号入力(001)3桁 A上記のpictureboxが表示 B線やら丸やら書く Cデータ内容保存 この繰り替えし。 この時のCで書いた情報の保存方法はどうしたらいいと思いますか?座標点の他にどんな情報があったらいいですかね? もう一回表示したい時とか
保存方法? 好きにしろとしか言えない どんな情報って、そりゃ線やら丸やら書いたときに使った情報だろ
実行中は線引く際のストローク、円を描く際のパラメーターをリストで保存してくのが定番。アンドゥリドゥのために。 保存するときは、imageに変換しても良いし、描画履歴の情報を保存しても良い。 何がしたいかによるとしか
自作のコントロールでFontプロパティを実装しようと考えています。 FontはIDisposableを継承しているので適切なタイミングでDisposeを実行する必要があると思うのですが ・コントロールのDispose内 ・プロパティのsetter この2箇所でDisposeの呼び出しを実装すれば大丈夫ですか?他にDispose呼び出しが必要な所は無いですか? 具体的には↓のように実装しようと思っています https://ideone.com/rJl7Fj >>707 別のオブジェクトが同じFontの参照を握ってる可能性もあるから 自分の都合で勝手にDisposeするわけにもいかんでしょう。 ほっておくしかないのでは。 どうしても気になるならFontプロパティのセッターでFontの参照そのものをバッキングフィールドに キャッシュするのではなく、等価なFontを再構築可能な情報をキャッシュするようにするとか 本当はこういうプロパティーの実装はよくないみたいだけど(ゲッターの返す値が毎回別のオブジェクトになるから) A : myControl.Font = new Font("MS UI Gothic", 9); B : myControl.Font = mainForm.Font; 毎回上記のAのようにするならDisposeしても大丈夫だけどBみたいなことをすると mainFormのフォントが勝手にDisposeされることになるからまずいから 自動プロパティとかにしてDisposeはGCに任せるか、内部的にはフォント名、サイズとかの 情報だけ持たせてgetterで毎回newする形にするしかないってことですかね?
>>707 Control継承するとFontプロパティもついてくると思うけど別に使うのかな? >>709 蛇足気味だけど厳密にやりたいなら set { Font ft = value as Font; if (null != ft) { if (null != _myFont) _myFont.Dispose(); _myFont = new Font(ft.FontFamily, ft.Size, ft.Style, ft.Unit); } } こんな感じかな。他はそのままで set { _myFont = value; }でも大した問題起こらない気もする もっとまじめに考察したいならILSPYでControlのFontプロパティがどうやっているか追っかけて確認してみるとか 効果音(WAVファイル)鳴らしたいのだけど、VisualStudioのどこからインポートすればいいのでしょうか?
プログラム内に、リソースとして音楽ファイルを埋め込みたいのだと思われます
ビルド完了時にファンファーレなどを鳴らしたいのだと思われます
[Ctr]キー + [r]キーを押して、mmsys.cpl と入力して[Enter]キー 「サウンド」タブのプログラムイベントにあったはずだ ってか、これはスレチだろ
単にwavファイルを頭から再生するだけならSoundPlayerクラスでいいだろうけど ループポイントいじったり波形まで触るような凝った再生するならWin32APIを使わないとダメだろうな ってことが聞きたいんじゃね?
math.powでなくfor使ってa^b乗はどうやったらうまくいきます?
>>717 wav ファイルの波形パターンを取り出してプログラムで適当に加工したあと win32api に渡すと音がなる、とかできるのでしょうか?API関数名はなんですか? >>722 ググってすぐにソースが出てくんじゃん やる気ねーなら消えろ For文でTaskの配列を使いたいんだけど var task=new Task[10]; for(int i=0;i<10;++i) { int j=i; ←これ task[i]=Task.Run(()=>{なんかjを使う処理;}); } こんな風に変数の置き換えをしなきゃいけないのを処理する なんか別のカッコいい方法ってありますか?
>>726 var tasks = Enumerable.Range(0, 10) .Select(j => Task.Run(() => {なんかjを使う処理;})) .ToArray(); >>726 var task=new Task[10]; for(int i=0;i<10;++i) { task[i]=Task.Run(()=>{なんかiを使う処理;}); } >>728 残念ながら君より質問者のほうがC#をよく理解している 俺も727派だけど、別解としては for じゃなくて foreach (var i = Enumerable.Range( なら i をラムダ内でそのまま使っても問題ないよ(C#5以降) static void Main() { Console.WriteLine("Begin"); var tasks = new [] { Task.Factory.StartNew(() => Console.WriteLine("Task1 is running")), Task.Factory.StartNew(() => Console.WriteLine("Task2 is running")), Task.Factory.StartNew(() => Console.WriteLine("Task3 is running")), }; int index = Task.WaitAny(tasks); Console.WriteLine("Index = {0}", index); Console.WriteLine("End"); } } New[]ってなに?
>> 731 new Task[]の省略形 型は{}の初期化部から推論してる
ああそいうことなの、ありがとう。推論しすぎだよ。W
tasks Newしてるのにスタートしてないのも推論?
>>734 関係ない。単なる勘違い。 var tasks = new Task[]は配列の入れ物を作成してるだけで、 配列の中身はTask.Factory.StartNew()でスタート済み。 便乗で低レベルな質問してすまんが、なんでこれの実行結果って10のみになるの? なんか0〜9の10行になりそうな気がしちゃったんだけど・・・・どうして!? using System; using System.Threading; using System.Threading.Tasks; public class Test { public static void Main() { var task = new Task[10]; for(int i=0;i<10;i++) { task[i]=Task.Run(()=>Console.WriteLine(i)); } } }
たまたまメインスレッドで動いたやつだけConsole.WriteLineが動くとかそういうのなのかな?
>>736 ラムダ式の変数のキャプチャを理解した方がいいよ ありがとう!なんで10になるのかはわかったよ ただ次になぜ10が10個並んじゃわないのかが全然わかんなくなってきたぜ・・・・
>>740 forループの実行中にTaskが開始されてるからでしょ >>741 forループ中にTaskが開始されるとなぜ1つになっちゃうのか全然わからなんだ・・・・ メインスレッドが即座に終了して出力なしの方がザラだと思うが 明示的に待たないとTaskの完了など知った事ではないよ というか徒に増やした所でメモリ帯域とかで躓くのがオチ Taskは非同期だし、並列実行が望みならGPGPUなりを…
たかが10要素だし、配列に入れてるんだからWhenAllとかで待てるだろ 直行する問題を分離できないおバカさんかな
>>727-730 ありがとうございました。いい方法あったんですね そろい踏みで var task = new Task[10]; for (int i = 0; i < 10; i++) { int j = i; task[i] = Task.Run(() => Console.WriteLine("a={0}", j)); } var tasks = Enumerable.Range(0, 10).Select(i => Task.Run(() => {Console.WriteLine("b={0}",i);})).ToArray(); var task2 = new Task[10]; for (int i = 0; i < 10; i++) { task2[i] = Task.Run(() => Console.WriteLine("c={0}", i)); } foreach (var i in Enumerable.Range(0, 10)) { Console.WriteLine("d={0}", i); } Console.ReadKey(); で何回か試してみると、foreachだけは必ずタスクの起動順が順番通りで揃うんですね ちょっとこれを使ってみます >>745 foreachのはTask作ってない。他に合わせるなら foreach (var i in Enumerable.Range(0, 10)) { Task.Run( () => {Console.WriteLine("d={0}", i); } } でないとおかしい。 foreachだけはTaskどころか普通の同期処理だが…?
>>745 いやそれforeachはTaskによる実行になってないぞ foreach使うならループの中は>>728 のおバカさん版と同じにしないといけない(ただし>>728 とは違って意図通りに動作する) >>746-749 ああ、ほんとだ>>745 で書いたの間違ってら。。。 何やってんだ俺。。。 var task3 = new Task[10]; foreach (var i in Enumerable.Range(0, 10)) { task3[i] = Task.Run(() => Console.WriteLine("d={0}", i)); } これであってんのかな そんな簡単なコード間違えるような記述方式なのに頭おかしい
こんな簡単なコードでバグってるのかよ やっぱりラムダはクソだな
ラムダ式って void method() { int x = 1; int y = 10; Action a = () => {Console.WriteLine( x + y); }; a.Invoke(); x += 100; a.Invoke(); } こうやってメソッド内に導入した瞬間にこのメソッドが class クラス名が非表示のクラス { int x; int y; void a() { Console.WriteLine(this.x + this.y); } public void method() { this.x = 1; this.y = 10; a(); this.x+=100; a(); } } みたいに勝手にクラス化されて変数が内部でフィールド扱いになるって理解でいい?
>>755 そういう理解だと、例えば>>736 のコードみたいな挙動は説明しづらいんじゃない? 機能的に等価なコードに置き換えるんじゃなくて、ありのままを理解した方が簡単だと思うよ。 生成されたアセンブリをILSpyで逆アセンブルすると参考になるよ
こんな雑魚コードでそこまでしないと挙動のわからない欠陥品
雑魚はこんなこともりかいできないのか 生活が大変そうですね… ああでも雑魚は特養で生活してるから大丈夫だね よかった
質問です staticなclassに機密情報を保持してプロジェクト内のすべてのコードから参照して利用できるようにしたいです その場合、改竄を防ぐために決められた場所(コード)からしかsetできないようにしたいですがどうすればいいでしょうか? また他プロセスからのメモリ改竄はどのように対策をすればいいでしょうか?
>>761 書き込みじゃありません保持です 具体的には受け取った値をメモリ上に置いてそれを各所で参照します >>760 他プロセスからの保護は、System.Security.Cryptographyの ProtectedMemory.Protect()でMemoryProtectionScope.SameProcessを指定するとかかな >>763 情報ありがとうございます さっそく調べてみます 特定の呼び出し元からのみ設定に関しては、StackTraceで呼び出し元を確認かな。 Caller Infoだと微妙か。
メモリを直接書き換えてくるような攻撃だとアクセス修飾子なんて一切関係なく書き換えられるし、そもそもその後のif文自体を書き換えたりとかしてくるから一定レベル以上の攻撃は防げない とりあえずxor暗号程度で保持しとくとかは? get => 機密情報 ^ 0x01234567; set => 機密情報 = value ^ 0x01234567;
>>760 前者はセッターをinternalにするのが一番素直で分かりやすいと思う >>767 アクセス修飾子での制限はリフレクションで簡単に突破される >>769 当たり前やん。 悪意と不注意は区別する必要がある。 前者に対する防衛法を語る能力を俺は持ってないので 後者について言ったまで >>778 マジガイジかよ… 生ゴミはとっととくたばれ ClassA,ClassB,,,のインスタンスをJsonで保存したい。 Class Ihozon{ void init(){} //変数を初期化 string serialize(ClassA str){ } ClassA deserialize( string json){ } } というインターフェースを作って保存処理は共通化したいと思うのだが、Serializeするのにクラス名の 引数が必要になるので共通化できない。こういう場合どうしたらいいの?
>>781 ちょっと何言ってるのかよく分からないところがあるので 勘違いかもしれないけど、普通にジェネリックメソッドにするだけじゃないの? public static string JsonSerialize<T>(T obj) {...} public static T JsonDeserialize<T>(string json) {...} jeneric interface をつかったらいいんだね。できました。ありがとう。
インスタンスを保存して何か良い事あるのか? 言葉の違いなだけならいいが…クラス内の値を保存するんだよな? クラスのある位置を示すポインタを保存するんじゃないんだよな?
public interface Ijson<T> { T deserialize(string json); string serialize(T js); void init(); } public class ClassA : Ijson<ClassA> { } ClassAをシリアライズしたいのだけでど、Interfaseするんはわかったんだが内部に つねに class ClassFile{ void FileSave() {} void FileLoad(){} } を継承もしたい。 (中が固定なのでいちいち実装したくない) ClassA A = new ClassA(); A.FileLoad(); // これでAはファイルデータで初期化したい。 継承とinterfaceを同時にやるってどうやるの?
System.Web.Mail.MailMessageクラスのFieldプロパティでCDOのFieldを追加してました。 System.Webは古いからSystem.Net.Mailを使えと警告が出るので置き換えようとしてみたところ、対応する方法が見つかりませんでした。 ご存知の方いないでしょうか。
>>786 自己解決:Interfaseやめてジェネリックのクラス使えばできました。 別のプロジェクトからCopy してきた Form1をNameSpace名をこのプロジェクトに あわせて var fm = new Form1(); fm.ShowDialg(); とやっても、空のフォームが立ち上がる。なぜなんだろう?
>>789 エディタのキャッレットを > var fm = new Form1(); この行のForm1の箇所に置いてF12を押す >>786 もう解決してるみたいだけど、一応。 Interfaceと継承を指定する場合は、カンマ(,)で区切って並べるだけ。 >>790 ありがとう。解決しました。 InitializeCompornent();の呼び出しが消えていた。 なんでだろ。消した覚えはないんだけど。 >>791 interfaceを使えないかトライしてみましたが、どうもうまく行かないです。 ClassFileはIjsonをインターフェースする必要があって、Ijsonのinit()はClassAのプロパティや 変数の初期化なのでClassAの中でしか実装できません。なので ClassFile:Ijson<ClassA> ClassA:ClassFile<ClassA> のような構成になります。しかし問題があります。 問題:ClassFileの中ではinit()は実装したくないのに、実装を余儀なくされるが、初期化したい変数は ClassAの中にあるので困る。 clsAのインスタンスに代入する方法ってこれでいいのでしょうか? public class clsA: clsJson <clsA> { public void ParamLoad() { clsGamenParam v = this; v = base.ParamLoad(); } } public class clsJson<T>{ public T ParamLoad(string IniName = "") { T param = default (T); param = deserialize(json); return param; } }
splitcontainerで上下分割してて、 最大化させてもpanel1の方は縦幅(height)は変わらないようにしたいのだけど どのプロパティで設定できるのでしょうか
初期化を隠蔽したい? なら隠しメンバーに初期化済みフラグを持つことだな。
ピクチャーボックスに線を書くとか丸を書くとかした後にクリックで線を選択出来たりとかします? エクセルで言うオートシェイプ見たいな感じで
出来るよ 日本じゃコード例殆ど無いけど海外ならそこそこ見つかる
そりゃスクラッチで作ればできるだろうな >>798 のような質問をしてるレベルならまず無理だが シングルトンパターン実装が面倒だからstatic実装をしてしまう私は雑魚なのでしょうか いつインスタンスが作られるかぐらいの差しかないんじゃないのぉぉぉお起動時に一度だけ呼ぶ使われ方ならぁぁぁあ
>>803 グローバル変数を作る目的でシングルトンにするくらいなら、Globalクラスでも作ってそのstaticフィールドとして持たせて共有したほうがマシ シングルトンが用いられる大抵のケースでは、アプリでクラスAのインスタンスが一つしか必要とされないという要件を、 誤ってクラスA側に持ち込んでしまい不必要な制限をクラスAに対して与えている 基本的にシングルトンはアンチパターンであり、使うべきではないと考えておけばいい グローバル変数が必要になったケースというのが今までにない気がする
ログとかデバッグ用情報とかあったほうがよくね? 引数にログ渡すのも面倒やし
すべてのインスタンスをグローバル神クラスに突っ込む方法で管理してる現場も 案外良かったよ リークの類に強いのがよかった ひと目でわかるし
>>803 C#のstaticクラス導入の理由の少なくとも一つがそれだったはずだから いいんじゃないですか >>805 おおむねその通りだと思うけど、質問の答えになってない気がするw えーリソースひとつしか無いのにあちこちで呼ばれて困るわ。セマフォ使うにもシングルトンにしないと意味ないし。
そこでPrism.Unity等のDIコンテナですよ
そういやDIコンテナってどういう仕組みになってんのか全然わからん コンストラクタの引数をインターフェイスにするだけで、登録済みのオブジェクトを自動的に注入してくれるわけだけど・・・・ あれってコンストラクタの呼び出し側は一体どんな仕組みになってるの? そもそも引数のインターフェースを増やそうが減らそうがコンパイルエラーが起きないって、呼び出す側は一体どうなってるのかしら
>>812 普通にリフレクションで引数の情報取ったりコンストラクタ呼んでインスタンス作ったり簡単にできる >>813 ありがとう リフレクションは全然使ってなかったので勉強してくるよ デバッグ用に良さそうと思ってたら winformにそのものがあるしね
リフレクションはウンコみたいな依存関係を作る元凶だからな まともなヤツならまず使わない
こうやってクソみたいな依存関係のあるクソコードが量産されていくのがよくわかる
AというオブジェクトからBというオブジェクトにアクセスする場合 よほどの理由がないかぎりBからAにアクセスすることは避けないといけない できるだけコンポジションにするべき この場合、AがBを内包するようにする コレはシロウトでなければ常識の問題だからな
>>822 > AというオブジェクトからBというオブジェクトにアクセスする場合 > よほどの理由がないかぎりBからAにアクセスすることは避けないといけない 何で? 例えば俺がAでお前がBだったとする 俺からお前を殴るかもしれんし お前から俺を殴るかもしれん どちらにしろ お前はすでに死んでいる 低学歴知恵遅れほど 継承とリフレクションをうれしがって多用するからな まさに オブジェクト指向に低学歴知恵遅れは キチガイに刃物
リフレクションを使わないソースコードなんて気の抜けたコーラだろ
EF Coreのマイグレーションで自動生成したことしかないわ
>>831 Coreなら尚更だけど、今時手動でDLLを入れるのはやめろ NuGetで一発 ああdllの話かw こないだNuGet知らないやつがいて驚いたわ
>>831 UWPでは、System.Data.Sqliteとは別系統のMicrosoft.Data.SQliteというMSご謹製のライブラリがあるのでそっちを使ってください ちなみにDapperはマトモ動きませんのでEF Core使うか直にADOやらないと駄目だけどね リフレクションはgotoみたいな弊害があるって話?
漏れは、様々なアプリから使うために、C:\sqlite3 に、すべてを入れているけど。 ただし、C# は使わないけど sqlite3.def, sqlite3.dll, sqlite3.exe sqldiff.exe, sqlite3_analyzer.exe
[ProgramFilesFolder] あんたのアプリケーション.exe [x64] SqliteInterop.dll(64ビット) [x86] SqliteInterop.dll(32ビット)
>>838 Debugモードで動いたけどReleaceモードにしたら落ちた 詳しく調べるのもめんどいからプロジェクトから削除してADO+EFにしたよ やっぱりバカはいまだにうるう秒がどういうもんなのかすら分かってない 低学歴っていちいち低学歴を自白するからな そして低学歴の知ったかドイチェ語 すぐに分かるのが恐ろしいわ。。。
>>843 コレは誤爆だ リフレクションで問題になるのは オブジェクトの依存関係になるのは常識だからな リフレクションなしのコーディングなんて考えられんわ
暫く泳がせてたが オブジェクトの依存関係はリフレクションとは直接関係ないけどな メタデータ触るには不可欠だし ライブラリ周り作るにも必要なケースは多い 自称上級者が継承やらリフレクションや使ってドヤって害悪なのは同意
呼び出し方向を一方通行に制限するのは、循環呼び出しを避ける為だから。
ぜんぜん違う このスレにいるような池沼が作らなければ クラスライブラリも階層(ココで階層は継承の階層ではない)や種類で作るからな 低い階層に行けばいくほど単純な簡単な機能を提供するクラスになる 階層は完全に分離させて独立したライブラリにする そして明確に種類の異なるプリミティブがある場合は ライブラリを完全に分離させて独立したライブラリにする その上にアプリケーションを実現するクラス群がのっかる 低学歴知恵遅れが作るとすべて同じ階層で同じ種類になる
当然、低レベルな部分を実現するクラスライブラリと アプリケーションが主に利用する中間層のクラスライブラリと アプリケーション自体を記述するクラス群は シロウトでもないかぎり完全に分離するからな 低レベルな部分を実現するクラスライブラリは 当然、中間層のクラスライブラリやアプリケーション自体を記述するクラス群を 参照することはまずない アプリケーションが主に利用する中間層のクラスライブラリは アプリケーション自体を記述するクラス群を参照することはまずない 低学歴知恵遅れが作ると酷い依存関係ができる コレはオブジェクト指向関係なくライブラリの基本だからな
組織でたとえるならこうなるからな 経営者クラス 社員をこき使う ↓ 社員クラス ← 派遣をこき使う(職階ごとの複数の中間層) ↓ 派遣クラス ← キミラが担当するような低レベルな部分の単純作業(つまりキミラ) 派遣は社員の作業も役員の作業もしない 社員は役員の作業はしない 関数の行数が多いのは 作業を整理して作業を手順化して 派遣にうまく単純作業を割り当てれてないのと同じだからな つまり、人に仕事させないと自分の作業が増える キミラは派遣ドカタだからな、そういう作業はできないのは分かる 当然作業ミス(例外)が発生してスルーし続けてたら上までいく
3行にまとめられない奴の発言は読む価値がないって本当だわ
例えば扱うビジネスの領域が違えば 部門を分けることになる 会社に複数の部門があっても一つの会社だからな 種類で分けるというのはそういうことになる キミラみたいな一種類の単純作業しかしてないヤツラには関係ないワケ
というわけでな キミラは刺身にタンポポのせる作業に戻りなさい キミラにはムリ
いちいちタンポポ載せてる作業経過報告はいらない 作業の補助とか、いちいち次になにをするかとかとか指示はしないからな タンポポが地面に落ちたとかこのタンポポのハナ小さいとか そういう報告(リフレクション)もいらない 捨てときなさい それぐらい分かるだろう タンポポが足りなくなりそうになったら この台帳に書いときなさい コレだけはたまに見といてやるからな キミラのコーディングは自身がおかれてる立場と まったく一致してるワケ
プロジェクト適切に分けて 依存関係の正規化しろって話だろうに リフレクションは関係ないしな その程度の理解やから長い寝言いってる
所詮、派遣ドカタ 残念なことに派遣ドカタのレスなんか すぐにわかるわ
バカに限って抽象化とかいって サルみたいにうれしがって継承するからな 破綻はそこから始まる しばらくほっとくと データ受け渡しするために 無秩序に相互参照しはじめる こうなったら終わりの始まり
質問です ifの条件に配列を使いたいとき、例えば if( 配列[ ]=={1,2,3,4} ) みたいにやるにはどうするのが一番簡単ですかね 配列[0]==1&&……で一個ずつ作るしかないですか
左辺も右辺も同じ長さの配列であればfor文を使うと書く量を減らすことができる気はする
半角さんはこっちでも馬鹿を晒してるんだ。。 次世代言語スレで論破されてもまだみっともなくないんだね。
俺はできるだけなんでもリフレクションでやるようにしてるよ
半角カナの人はあっちこっちで喧嘩売っている話の通じない人だから相手にしないでくれ あとここ質問スレだから質問以外の話は相談室なり他で頼むよ
if( 配列.Where( a => (new int[] { 1,2,3,4 }).IndexOf( a ) > 0 ).FirstOrDefault() != null ) とかボソッと言ってみる。真に受けないでね。
オレはケンカなんか売ってない バカが真人間になるように矯正してるだけだからな バカはオレにケンカ売ってるつもりらしいな
>>859 「一番簡単」が何を求めているのかわからないが、比較するものの数が決まっているのなら「配列[0]==1&&……で一個ずつ作る」のが「速くなる」 汎用にしたいのならラムダもlinqも俺自身が使えないのでメソッドにすると例えば private bool hikaku(int[] arr1, int[] arr2) { if (arr1.Length != arr2.Length) return false;//配列の長さのCheck int i = 0; for (; i < arr1.Length; i++) if (arr1[i] != arr2[i]) break; return i == arr1.Length;//全部一致したら最後まで止まらない } メソッドを呼び出すのはそれだけで速度的にだいたいロスになるので「速い」動作を求めるのならこれも勧めない linq使うのが一般的だと思うけどそれは他の人に聞いてw まあ、>>861 で済んでるとは思うんだけど、あえて付け加えるならこう? public static bool Equals<T>(this T[] x, params T[] y) where T:IEquatable<T> { return x.SequenceEqual(y); } 今は(というか10年前からだけど)new[]{...}が使えるからparamsは有難みが薄いかもしれない vbで言う、戻り値もらう時Function 〇〇の〇〇の部分って変数はそのまま使えない? あとcallはないみたいだけど、人が書いたコード読む際にこれはなんか値取ってきてるなとか何か計算しにいってるなとか一目で分かるには慣れるしかないですかね?
〇〇 = 戻り値 は return 戻り値; じゃね。 Call は戻り値とかではなくて戻り値のない関数(Sub)を呼ぶときに引数の部分を () でくくりたい場合に使うものではなかったっけか。 戻り値を受け取るかは呼ぶ側で 変数 = 呼ぶ関数(); になってれば受け取るんだろうし、 呼ばれる側が戻り値を用意してるかどうかは呼ばれる側の関数の(戻り値の)定義が void になってれば返さないんだろうしってことじゃダメなん?
>>871 現代のVBではCallを明示的に書くのはMSが非推奨 >>874 MSが公式にそう言ってるのか?ソースはどこ? 意識高い系VBerさん達が梯子外されちゃって可哀想
VBでもCallなんて付けない方がいいと思うしそれが普通だと思うけど、 >>876 の内容はCallキーワードの使用一般を非推奨とはしてないじゃんw これが非推奨と言ってるのはたぶん、 Call Math.Min(1, 2) みたいな使い方。これはCallはC系の言語でいう式になってない、つまり Dim x = Call Math.Min(1, 2) と書けないことも一因か? あと、>>871 の >vbで言う、戻り値もらう時Function 〇〇の〇〇の部分って変数はそのまま使えない? これはどういう意味なの? まったく分からん C#でも自分のメンバー呼び出しにthis付けないと気が済まない人がいるけど、 あれはVBから来た人なのかねw Call付けたい心理とたぶん同じだよな
こうしてまた場外乱闘が始まる。 なんでわざわざ煽るかね。
>>880 別に煽ってないし this付けたがる人はそもそもそんなに多くないと思うから杞憂だよ >>878 いや呼び出しが識別子で始まらない場合って書いてあるでしょ サンプルコードにあるように、New Hoge.Method() とか、ラムダ式を即時呼び出しするケース これは純粋に構文解析上の制限だろう BASIC系ではステートメントは原則的にステートメント種別を示すキーワードで始まらなければならず、式が単独でステートメントになることはできない これは構文解析を楽にするための制限で、大昔の言語ではわりと一般的なスタイルだ ただ、さすがにそれは不便だということで、識別子から始まる式については例外的に単独でステートメントになることができる >>876 のサンプルコードにあるようなケースでは四季がステートメントと見做されないから、例外的にCallが必須になるということだね >>883 ああ、なるほどそうだねごめんw MSDNの記事読んでなかったよw VBは (New TheClass()).ShowText() と書けないのか。ダメな理屈がよくわからんなあ ラムダ式の即時呼び出しは便利そうだね。 必要になった記憶はないし、戻り値を握りつぶすんじゃ相談室の方の661の 質問みたいなことはできないが 文法の違いにケチつけても意味無いだろ 外国語覚えるつもりで勉強しろよ
言語の記述方式ばっかりこだわって大したもん作れなかったら笑う
>>878 vbではfncHogeの戻り値を設定するのに return 1 fncHoge = 1 のどちらの書き方もできたねん 関数の中で、関数名を変数名として使えた 再帰処理なんか考えたら パっと見紛らわしくて 可読性に問題あるけどね ちょっとすれ違いだけどVB出てきたのでちょっと質問 C#でMicrosoft VisualBasicを参照にしてInteraction.InputBoxを使って「キャンセル」が押された場合は VBで言うEmptyが返るはずなんだけど(VBのfunctionで何も値を設定せずexit functionした場合はEmptyが返る)、 EmptyかどうかをC#で判定する方法ってありますか?
VBScriptなんかだと r = Inputbox("何か値を入れてね") if IsEmpty(r) then MsgBox "キャンセル押したね?" という風に空文字列と区別とできるのでそれをやりたいの
初心者用スレッドは学習者のためにあるべきだろう 進歩のないVBコピペプログラマーのためにコードを代わりに書いてあげる場所にはならないようにしようぜ
>>891 デバッガで何が返ってるか見たらすぐ分かるでしょ >>891 何も入力しないでOKでも、キャンセルでも空文字列だから判別できないね キャンセル判定したかったら横着せずに自分でフォーム作れって事でしょ >>892 たぶん分かってると思うけど、ドキュメント見る限り無理だね そもそも今時モーダルなダイアログを表示してテキスト入力させるUIってどうなのよって気がする 単純なメッセージボックスでもイラッとくるよね >>891 その Empty の型はなに? たぶん string なんだろうけど、それなら IsNullOrEmpty() あたりかね。 895 の言うような問題もあるけれど、もとから Empty かどうかだけで判定してたなら上ので用が済むんじゃね。 nullが来ないなら==でstring.Emptyもしくは""と比較するだけで良い
>>892 そもそも、今のVB.Netでもそれ出来ないから >モーダルなダイアログを表示してテキスト入力させるUI えっこれって今いけてない扱いなの? 今どきはどんな感じでやってるの
別に本当に必要ならモーダルでいいよ。 どうせ分かって言ってると思うけど、モーダルなダイアログはユーザーの自由を奪って 特定の操作の完了を強制するUIだから、可能なら避けるべきなのは当たり前だし、 昔から嫌われ者だよね そして、どうしてもモーダルなダイアログでテキストの入力を強制する必要があるケースなんか あんまりないと思う。他にいくらでも代替手段があるでしょ
>>902 俺は逆 どうせ特定の手順でしか設定できない・しないのに無駄な自由度を付けて バグを盛り込んでいるアプリが多い 完成度が低い >>902-903 システムモーダルなら問題あるけど、アプリケーションモーダルなら好きにすればいい うちの場合、モーダルではなく、入力されて問題ない時だけ入力出来るようにしてるわ。 ボタンも、押すと問題があるor意味がない時は無効化。 オペレーターの入れ替わり多い業界相手に売ってるから迷わせたらサポートが死ぬ。
アプリケーションモーダルでもメインウィンドウの移動が出来なくなるのは嫌い
IEではお気に入りに追加はモーダルなダイアログだったけど、 EdgeではChromeやFireFoxを真似てモードレスになってるよね。 まあ、さすがにモーダルの方が好みとか、作る方の都合を言ってるんじゃなきゃ ネタで言ってるんだと思うが...
デバッガで追ってみましたがどうもだめっぽいのであきらめます ありがとうございました
まさかクソセンスのないおまえらがUIを語るとは思わんかったw 大体ユーザーが喜ぶんわおまえらが良いと思う逆やからね これ覚えとった方がええでw
>>879 thisつけたいのはIntelliSenseで楽するためじゃない? >>912 逆?違うよ ユーザーが喜ぶのは カッコイイとは無縁の Excelだよ 設定はExcelファイルから 帳票はExcelファイルで出力 これさえ押さえておけばオールオッケー モーダルダイアログの欠点は、マルチウインド故に偶に起こる事故でモーダルなのにウインドウがメインの裏に回っちまって操作不能になる それが改良されたUWPのContentDialogは良いね 何しろメインウインドウ上に描画されているだけだから上記の事故が発生しない wpfのmaterial design xaml toolkitでも似たようなことが出来るな
>>916 TopMost=trueにしとけば済む そうなってもタスクバーからのサムネイルで消せるけど 工場のおっさん、電話かけてくるからな
>>919 そもそも>>916 が言ってるような挙動は本当であればバグ。 内部の実装としては、親を指定しないバージョンが呼ばれた場合は 恐らくアクティブウィンドウを親にしてるはずで、そうであれば解決策にはならんだろうね もっとも、こんな挙動は確かにWin9x時代は何度か体験した記憶があるけど、 Win2k以降は個人的には記憶がないなあ >>916 それってweb画面では当たり前で昔からあるしIEベースのHTAでもできる UWP発祥とかじゃないよ >>920 GetParentをcallすれば分かる たまに暴走状態になって強制終了するしかなくなるのですが、 単純なエラーではなく暴走なのでどこのプログラムミスで暴走しているのかわかりません。 対処方法ってありますか?
こういうやつです。 マウスポインターで待ち状態のカーソルが出て半透明になり、その後↓の警告が出てくるような状態です。 簡単に再現すると、これを実行したような状態です。 bool test = false; while (test == false) { }; しばらくすると半透明になって、右上の×しか押せなくなり、押すと↓のような警告が出て終了するしかなくなると思います。 単にメインスレッドで重い処理やってるだけのような気もしないでもないけども とりあえずCPUに余裕があるならVS起動してプロセスにアタッチして全て中断してみる
盗んだバイクで >>926 デバッグ実行してその問題が起こった時に、にIDEのツールバーの一時停止のピクトグラムのボタン (ツールチップの表示は「すべて中断」)を押せばビジーループになってる箇所が分かるんじゃない? >>926 VS2017ならデバッグのパフォーマンスプロファイラーで監視したらデバッグ停止した後にCPU負荷の一覧をメソッドごと(関数名)に作ってくれるよ だいたいどこかのループで嵌っているんだろうから自分で書いているのなら当たりつけてブレークポイント入れていけばわかると思うけど 見た目とコードを分離するために、WPFとかではMVVM pattern使えとか 書かれていることあるけど、企業向けの業務アプリでは コードビハインドにはほとんど書かずにMVVMでかく割合はどれくらいなの? コードビハインドほとんど使わなかったらコードが冗長になって マイナス面のが多そうに感じる。
その前にWPFを採用する割合がほぼゼロ .NETの業務アプリなら今はほとんどがASP.NETで一部WinFormsが残ってるくらいだよ
うちは専用端末向けの業務システム売ってるけど、WPFでなくWinForms使ってる。 ハードウェアとASPサービスのセットが前提の売り物だけど。
>>932-933 クロスプラットフォーム対応のためにWeb appというのはかなり前 からあるのは知ってるけど、ほとんどというほどASP.netになってるの? あとASPはclassic ASP.netではなくASP.net MVC? Web appのデメリットとしては ブラウザだとUIがしょぼくて操作性が落ちる 見た目も悪い UIまわりの開発の時間とコストが増える ブラウザバージョンアップで動かなくなる パフォーマンスも落ちる とかデメリットが多すぎるし全部ブラウザだけでなんとかするのは少数派だと思ってた。 >>932-933 web appとの比較は別にして、WinFormsとWPFの選択肢で 新規でWinFormsを選ぶ意味ってまったくないんじゃないの ただWPFわかる人がいなくてWinFormsでやっちゃったというかんじかな WinFormsはWPFに比べて表現力が劣るからUIまわりで後から細かい注文 ついたときに困ったことになるんじゃない UWPが微妙だから、desktop appはWPFの一択になってると思ってたわ 今ならWPFよりもXamarin使ってクロスプラットフォームとリッチアプリの いいところどりがいいのかな コカ・コーラとかSMBCがXamarin使ってるらしいけどMonoバグだらけ時代を 知っているとXamarin使うのも怖い 分かる人がいないって超リスク要因なんだけどスルーなんすね 仕事したことあんのか
WPF分からずに使ってるならリスク保有 WPF分からないから使わないならリスク回避
仕事したことないんだろうけど、業務アプリでは特にどうしても止むを得ない理由がない限りはWebアプリを選ぶんだよ イケイケのWebベンチャーでなくても、毎日のようにリリースされるシステムって普通にあるんやで
俺が前にいた会社はWPFバリバリ使ってたよ。 Blendも使ってた。 デザインセンターとやりとりするのにBlend確かに便利だったし。 WinFormsはほとんど使ってなかったな。
>>936-937 あおるつもりじゃなくて真剣に思うけど 開発やってる会社がWPFすら知らないってのは会社としてレベルが低すぎじゃないか WPFでたのが2006年 12年経ってもWPFわかる人いないくて新規でWinFormsで開発ってかなりやばい C#ならクライアントの要望に応じてWPF, UWP, Xamarinと提案できるのが まともな会社だろう。 MVCへの反応なかったところみても、ASPも古臭いclassic ASP使ってるんだろうな ORMも使わずSQLゴリゴリ書いてそう >>938 PCの初心者ほどわかりやすく使いやすいUIが必要 Webアプリって最低レベルのUX, UIだ Web appが使いづらいからこそ多くの企業がsmartphone appをリリースしている 一般の個人ユーザーでさえWeb appを嫌っているという証拠だ 業務で長時間使うアプリがブラウザベースっていうのは普通にゴミでしょ >>939 本当はユーザーに選ばせたのではなく、classic ASPしかできないから ほかも提案せずにclassic ASPで開発したんだろう。 ユーザーはやむを得ない理由がない限りブラウザみたいな使いづらいのを選ばない。 Xamarinとか使えばクロスプラットフォーム対応もできるわけで Web appを使わなければならないケースもほぼないだろう。 不特定多数に使わせるシステムならブラウザでも仕方ないが社内利用だからな 今の業務系ってWebの方が多くない? 長時間使うものでも。 セットアップが必要だと割と嫌われる気がする。 環境変えるのは割と稟議要るし。 うちどうしてもクラサバにするアプリは未だにClickOnce使ってる。
業務系っつってもいろいろあるしな インストールとかのこと考えたらwebで済むならwebでやったほうが導入コスト抑えられることもあるし 案件次第かと
考えるに、Web系にしたいのは、タブレット対応を出来るだけ楽にやりたいって方が大きいんじゃないかな。 iPadアプリなんかは大量に作るわけにもいかんし。エンタープライズでも個数は決まってるから。 ASPならある程度は楽だよ。 UI部分はJSフレームワークと内製コントロール使ってるけど、今までのフォームベタ書きより遥かに楽。 そういえば今Office365だってReactだね。
認証もSSOかけたいしね。アプリ毎にログイン画面出したり、ログイン用dll蹴るとかすると、クロスは意外に苦労する。
使いづらいとか関係ないんだよ 工場が使いづらいからって従業員がその工場を使わないなんてあり得ないだろ? ID:GJ/DAGX40が想像してるのはその工場の中で使われる工作機械(Excelみたいなツール的なアプリ)の開発だろうけど、 実際のシステム開発では工場を作る仕事の方がずっと多いの
学生だと思うけど、仕事でバリバリ使える新しい技術を習得したいならUI技術なんかどうでもいいからAWSを学ぶことを強くお勧めする 伸び続ける需要に対してまともなクラウド技術者(AWSから単なるホスティングサービス以上の価値を引き出せる人)はSI業界では全然足りてなくて、 一通りのプログラミングスキルを備えた上で手を出すなら技術スキルとしては最強よ
業務系で漠然としすぎてるなら、基幹業務アプリと仮定する >>943-944 Deploymentが心配ならgroup policyで一括でいれちゃえばいいでしょ ClickOnceよりさらに楽になる >>944 Deployはすぐ終わるけど、 ブラウザベースにすると社員の生産性が落ちてずっと損失が続くよ >>947 使いづらいとか関係ないと言っちゃう人は開発者に向いてないんじゃないの 自分はフリーウェア作る時でもどうやったら他人が使いやすくなるかじっくり考えるよ Excel?工場? 社会人だしASP.net MVCでサイト開発もやってるしDB側も自分でスキーマから作ってる。 受託開発のような立場ではない開発者 まあ普通はWinformsでできることにWPF使わないよね 情報もミドルウェアも豊富だし完全に枯れてるし開発者も簡単に見つかるし グラボのドライバのトラブルをモロに受けたりしないし Winformsでは実装が大変なリッチなUIを実現したい場合に初めて検討するんでええと思うわ
今ならWinFormかUWPの2択だな WPFはない
C#とたぶん関係ないけど、病院の待合室とか、科学館みたいなところで いろんな情報をアニメーション付きで表示するサイーネージって今は何を使って開発してるの? ああいうの大半はWindows PCだと思うけど まさかFlashじゃないよね
>>955 何で作ってんのかは知らんけどああいうのがWPFを使うべき案件 なんでwebアプリだったら生産性が落ちるんだw そんなんケースバイケースじゃん 広い世の中いろんな案件、全部一緒くたにしてよく語れるなw
Webアプリってことはサーバー用意しないといけないじゃん WinFormでForm全体にGeckoブラウザ表示してhtmlとcssでUIつくればよくね?
そうしてみんなelectronにたどり着く c#を捨ててtypescriptへ
Winform推してる人ってマジなのか? デスクトップアプリ作るならWPFかUWPのどっちかだろう いまだにWindows7の会社もあるんだからWPFしか使えないところもある Winformの利点はvbでポトペタで誰でも出来るから作る人すぐ見つかるぐらいだと思うが
>>949 だいたいそういうものは特定の部署の人だけが使うものだから、そんなに細かくグループポリシー切ってないし、 グループポリシー変えるってのはそれこそ環境変えることだから、超慎重論者が出てくるよ。 >>955 サイネージはFlashあるよw モダンな所だとHTML5だろうけど。 Animateで作れる範囲が多いんじゃないかな。 待合の番号表示はまさにWPFでやってるのを知ってる。 とはいっても、winformとWPFはオープンソース化されるわけで
>>958 業務アプリならどっちみちサーバーは必要 Webならクラウドでハード持たずに解決することもできる >>943 ClickOnceの証明書どうしてる? WinFormsいいよ、低レベルだから開発要員も集めやすいし
WPFはWinFormを脳死で移行出来る仕掛けを作らなかったのが敗因
結局まともなUIフレームワークがないのかあ やはりWinFormにGeckoかクロウニウム表示して裏はc#ってのがいいんじゃねーの
今の時代はWinFormsが低レベルなんだよなぁ、と感慨にふける
winformsでも単色ベースでちょっと半透明でも混ぜとけば今風になるじゃろ? xmlから動的生成もやろうと思えばできるし
WinFormでもちょっと凝った効果出したかったらOnPaintオーバーライドしてどうとでも描画できるからまったく問題ない
WPFはサードパーティーのコントロールとかかわなくてもきれいなUIつくれる。 UIだけでなくDatabindingもWPFのが出来がいい 否定してる人は勉強してなくてWPFほとんど使ったことない人だろうな
>>963 中堅以上の企業ならdesktop PCの管理ツールいれてるでしょ グループポリシーじゃなくても管理ツールで一括でdeployはできる web appの場合はブラウザのバージョンをそろえる必要があるし web appのが楽とも言い切れない >>967 ちゃんと買ってるのもあれば、そうでないものあるって感じかな。 一応ルート証明書としてポリシーで撒いてるものはあるけど、必ずしも全てのプロジェクトでそれが使える訳ではない。 >>976 インストールって行為がいかんのだと。 こちらが入れるあちらが入れるの問題ではない。 あんまり資産管理アプリの存在を気取られる訳にもいかんしな。 ブラウザのバージョンはもっと話が単純で、完全固定だよ。IEだけど。 Windows Updateも検証してから撒いてる。 >>975 そんなことないよw もうだいぶ忘れちゃったけど、Win8が出た時にストアアプリと一緒にWPFも勉強した。 その上でやっぱりWPFは問題あると思う。 WPFの利点は認めるし、XAMLを導入した問題意識もよく分かる。 Windows Formって基本的に30年前のUIだから表現力に問題があるのはしょうがないとしても、 実用的なUI作るとFormのコードが肥大化してメンテしづらくなる。 だからバインディングその他を使ってイベントハンドラを追放しよう、って発想はよくわかるけど、 これでコードが減って可読性が上がってメンテしやすくなったかと言うと...個人的には大疑問。 むしろFormより悪くなっちゃってるとしか思えない。 WPFが普及しなかったのか結局そこだと思う。 前も書いたけど、WPFは作ってる時はいいけど、後で見た時に必ずしも可読的じゃない。 全くもって違うよそれは WPFではUIの自由度が上がることで制御すべき状態の数が激増するから、 それが極力開発者の負担にならないようにするためにバインディングが強化されたんだよ。 WPFの本来の思想でいえば、普通にコードビハインド書きまくって従来のコンポーネント指向で作るのが正しい使い方。
WPF一択 UIを大幅リニューアルするとき、xamlだけの修正でVMは弄らずにすんだから きちんと分離しといてよかったなと思う。 あと最近増えてきた高解像度ディスプレイで文字を拡大表示するPC(Surfaceとか)で、 プログラム側の対応無しに自動的にサイズ調整してくれるのも助かってる。 WinFormで高DPI対応とか地味なうえにめんどくさくてやる気出んわ
>>976 .NET Frameworkのバージョン揃える方がきつい あと、Blend使っておくとデザイナーさんがデザインガイドライン通りに直してくれるプロジェクトだったから、WPFはありがたかったな。
Delphiのバインディング知ってるとWPFのそれはあまりに複雑
バインドつながらないときにどこが腐ってるのか調べる方法が蝨潰しだからクソ やること決まってるんだからあるべき接続図をビジュアル化して出せ さらにつながらない原因ってこっちのコントロールではこのやり方でできたけど こっちのコントロールでは無理なんすよっていう開発者の程度の低いボケ そら誰も使わん
はっきり言うけど OnDrawかOnPaintで値が好きにいじれる mfcやwin32のが遥かに完成されてる
>>986 見てるとWPF嫌いなヤツは無能なんだなって思う できるやつはWPFの恩恵受けられるから良く思えて無能はその逆ってことだな >>988 では、「素晴らしい」開発を一人でやりたまへ たりないあたまでがんばったのはすごい ようちえんからやりなおして、たりないぶぶんをてにいれてきてね ばいばい
>>987 ちょっと凝ったことをしようとすると すぐそれに頼ることになるのが嫌なんだけど >>987 C, C++は生産性が低いからC#使ってるんでしょうに >>981 WPFのが分離されたきれいなコード書きやすいのはおおきなメリットだろうね >>979 イベントハンドラは便利だし普通にWPFでつかってる。 メソッド長くなり過ぎないようにしてれば、後でそこまで困ったことには ならないと思っている。 データはEntity Framworkでやってコード短くしている
-curl
lud20191217174910ca
このスレへの固定リンク: http://5chb.net/r/tech/1538646998/ ヒント: 5chスレのurlに
http ://xxxx.5ch
b .net/xxxx のように
b を入れるだけでここでスレ保存、閲覧できます。
TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「ふらっと C#,C♯,C#(初心者用) Part140 YouTube動画>2本 ->画像>15枚 」 を見た人も見ています:・ふらっと C#,C♯,C#(初心者用) Part130 ・ふらっと C#,C♯,C#(初心者用) Part141 ・ふらっと C#,C♯,C#(初心者用) Part146 ・ふらっと C#,C♯,C#(初心者用) Part129 ・ふらっと C#,C♯,C#(初心者用) Part145 ・ふらっと C#,C♯,C#(初心者用) Part132 ・ふらっと C#,C♯,C#(初心者用) Part139 ・ふらっと C#,C♯,C#(初心者用) Part131 ・ふらっと C#,C♯,C#(初心者用) Part144 ・ふらっと C#,C♯,C#(初心者用) Part134 ・ふらっと C#,C♯,C#(初心者用) Part141 ・ふらっと C#,C♯,C#(初心者用) Part143 ・ふらっと C#,C♯,C#(初心者用) Part138 ・ふらっと C#,C♯,C#(初心者用) Part142 ・ふらっと C#,C♯,C#(初心者用) Part136 ・ふらっと C#,C♯,C#(初心者用) Part137 ・ふらっと C#,C♯,C#(初心者用) Part148 ・ふらっと C#,C♯,C#(初心者用) Part121 ・ふらっと C#,C♯,C#(初心者用) Part148 ・ふらっと C#,C♯,C#(初心者用) Part149 ・ふらっと C#,C♯,C#(初心者用) Part151 ・ふらっと C#,C♯,C#(初心者用) Part152 ・ふらっと C#,C♯,C#(初心者用) Part147 ・ふらっと C#,C♯,C#(初心者用) Part128 ・ふらっと C#,C♯,C#(初心者用) Part119 ・ふらっと C#,C♯,C#(初心者用) Part154 ・ふらっとC#,C♯,C#(初心者用) Part88 ・ふらっとC#,C♯,C#(初心者用) Part92 ・ふらっと Q#,Q♯,Q#(初心者用) Part 1 ・くだすれC++/CLI(初心者用)part2 ・★日本語と英語を併記して会話しよう(初心者用)★ ・Webサイト制作初心者用質問スレ part251 ・何か楽しい教本・曲集ないの?(初心者用) ・ブラックなベンチャーについて語るスレ(初心者用) ・【キンスレ】キングスレイド初心者用スレpart2【初心者】 ・Webサイト制作初心者用質問スレ part252 ・Webサイト制作初心者用質問スレ part253 ・【Esperanto】エスペラントの初心者用スレッド【国際補助語】 parto1 ・くだすれFORTRAN(超初心者用)その7 ・立憲民主党(政治初心者用)☆1 ・くだすれAjax(超初心者用) ・Diablo2 超ドQ!初心者用スレ ・くだすれC++Builder(超初心者用)その5 ・街コン行く人集まれ(初心者向け)Part4 ・街コン行く人集まれ(初心者向け)Part4 ・ふらっと C#,C♯,C#(議論用) ・FX初心者スレ Part120 ・FX初心者スレ Part110 ・クロスバイク初心者質問スレ part10 ・セキュリティ初心者質問スレッド Part140 ・【TF2】Team Fortress 2 初心者スレ Part100 ・渓流のトラウトルアーフィッシングPart1(初心者書き込み厳禁) ・還暦初心者の会 Part1 ・FX初心者スレ Part112 ・FX初心者スレ Part121 ・FX初心者スレ Part128 ・FX初心者スレ Part134 ・FX初心者スレ Part129 ・FX初心者スレ Part127 ・FX初心者スレ Part101 ・FX初心者スレ Part109 ・FX初心者スレ Part113 ・MTB初心者質問スレ part103 ・MTB初心者質問スレ part105 ・MTB初心者質問スレ part103
16:59:03 up 3 days, 3:23, 7 users, load average: 9.52, 9.83, 9.89
in 4.6644849777222 sec
@4.6644849777222@0b7 on 121506