1 名前:デフォルトの名無しさん [2007/08/26(日) 12:42:25 ] (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。 前スレ C#, C♯, C#相談室 Part41 pc11.2ch.net/test/read.cgi/tech/1184840053/ 過去スレは>>2-5 あたり。
388 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 12:40:05 ] >>386 それって匿名メソッドスゲーの例じゃないの。
389 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 12:46:03 ] C#2.0になってジェネリックや暗黙のインスタンス作成や匿名メソッドが付いて デリゲートが使いやすくなったけど、その前は単体ではあんまり積極的に使われなかったような
390 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 13:00:11 ] イベントとか意味わかんねえ +=と-=しかできないし なんに使うんだよ
391 名前:デフォルトの名無しさん [2007/09/06(木) 13:01:53 ] >>390 イベントのハンドリングだとおもう。
392 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 13:04:04 ] 普通にdelegate使った方が入れ替えられて便利じゃん 無駄なフェイルセーフだぜ
393 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 13:08:04 ] 一応プロパティと同じように実装の変更もできる
394 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 13:08:20 ] >>390 IDEによるポトペタ
395 名前:385 mailto:sage [2007/09/06(木) 13:17:22 ] >>386 >>388 そうですね匿名メソッドですね >>387 そうですか…なんかイベントの話になってきてますね んーデリゲートでこんな風にしたらすっごい便利! とかいう話ないですかね
396 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 13:45:38 ] void Hoge() { list.ForEach(Print); } void Print(int x){ Console.WriteLine(x); } コレクション関係以外にないかなあ
397 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 13:58:02 ] >>395 処理のインジェクションしたいところにはdelegateばんばん使ってます。 クラスの生成時とかにそのシチュエーションに併せて動作を変えたいとき便利。
398 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 14:00:41 ] インターフェースを実装したクラスを作るよりも楽>delegate
399 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 14:55:19 ] Action<T>は interface IHoge<T> { void Method(T arg); } とだいたい同等で class A { public Action<Foo> Action; } class A { public IHoge<Foo> Action; } これもだいたい同等 a.Action = delegate(Foo foo){ .... }; これと class FooHoge : IHoge<Foo>{ ... } a.Action = new FooHoge(...); これも大体同等 匿名メソッドなら直接かけるから一々定義したクラスを読まなくてすむので見やすい ラムダ式になるともっと便利になる 匿名メソッド使わなくても、引数さえ合えばどんなメソッドでもはまるから、 いちいちinterface実装したクラスを作らなくて済む分楽 でもやっぱり真価は匿名メソッドで出てくる
400 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 15:04:40 ] interfaceでは大げさすぎる場合も多いし、例えばイベントハンドラを インタフェースとして実装した場合、同じWidgetを複数個持とうとするとに インタフェースが衝突する、といった問題が生じる。Javaではこれを解決 するのに一々ゴテゴテと無名クラスを記述する羽目になり、実に馬鹿馬鹿しい限りだ。 ラムダ式が無くとも、delegateであれば上記の問題は普通に解決することが 出来る。 まあ、処理を汎用化したり(例えば描画ルーチンに、PixelをPutする ルーチンだけdelegateとして与えられるようにすれば、汎用になる)、 テーブルジャンプっぽく使ったり(メニュー等のindexとdelegateの配列を 結びつけたりする)、意思決定と実行のタイミングが分かれている場合に、 意思決定→delegate変数に保存→delegateを用いて実行といったことをやったり (実行が何度も行われる際に、無駄な条件分岐を完全に取り除くことが出来る)、 色々と応用範囲は多い。
401 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 15:17:17 ] delegate使うとエディットコンティニューでやり直しになるのがデメリット
402 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:37:05 ] 久々にThreadPool.GetMaxThreads()を実行してみたらワーカースレッドが500、I/Oスレッドが1000になってた。 前はもっと少なかった気がするんだけど・・・なぜでしょうか?
403 名前:385 mailto:sage [2007/09/06(木) 19:32:29 ] なるほどーみなさんいろいろ使ってますね デリゲート道、精進します ありがとうございました
404 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:04:16 ] >402 前は少なすぎたせいでスレッドプールが一杯になって例外が起きるケースがあったのでので.NET2.0から事実上無制限といえる値に増やされた。 なにげに呼んだクラスが内部でスレッドプールを使っててスレッドプールの上限で例外吐かれたりしても対処しようがないじゃん。
405 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:10:45 ] ClassAのイベントにメソッドを紐付けしてるClassBがシリアル化可能じゃないと ClassAまでシリアル化できなくなっちゃうけど、これって何か回避方法ないかな? あと、デリゲートにインスタンスメソッド登録するということは、 デリゲートに参照を持たれる(つまりGCが働かない)こととやっぱり等価になるの?
406 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:20:37 ] 当たり前 っていうかイベント結びつけたままシリアライズしたいって いったいどんなときなの?
407 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:22:28 ] ああひょっとしてシリアライズさせない方法が分からないってことか? メンバにつける属性で制御できるよ
408 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:43:28 ] でもNonSerializedAttributeってイベントには付けられないと思うんですが。。
409 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:56:27 ] >>405 デリゲートを明示的に宣言してそのデリゲートにNonSerializedつければいいらしい。 ↓参照 www.thescripts.com/forum/thread245864.html
410 名前:409 mailto:sage [2007/09/06(木) 21:01:10 ] [field: NonSerialized]でもできるみたいだな こっちのほうがスマートか。
411 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:09:45 ] >>409-410 ありがと。 しかし、そんなマンマの回答よく短時間に見つけられるもんだね関心しちゃうよ
412 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:44:51 ] 部下にほしいね。 すみません師匠にほしいです。
413 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:56:13 ] このスレには結構、神クラスのスキルのひとがいるいよね。 どんな立場の人なのかきになるわ。マイクロソフト直々のサポート部隊が 書き込んでいるんじゃないかと思ってしまうくらいだ。
414 名前:デフォルトの名無しさん [2007/09/06(木) 21:59:52 ] やまだはぷろぐらむの天才だ。 きょうもすごいぷろぐらむをつくる。 int i = new int() あれ、なにかへんだぞ。 intはたしか・・・ Int16 やまだくんはまだ満足しない。 iというなまえはかぶるかもしれないからあんぜんじゃない! Int16 _USER_OBJECT_YAMADA_WRITE_200709062156_FOR_COUNTER 完璧なソースコードの誕生だ!
415 名前:デフォルトの名無しさん [2007/09/06(木) 22:02:31 ] >>413 そのクラスの人間なんて見たときねーよ
416 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:02:47 ] すみません。どれが自作自演でしょうか?
417 名前:デフォルトの名無しさん [2007/09/06(木) 22:03:48 ] やまだだけどなんでもそうだんにのるよ!!
418 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:05:47 ] >>414 jが必要になったらどうする。
419 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:06:12 ] やまだくんはネームスペースをだな
420 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:06:28 ] 田中は山田のイヂワルな上司だ。 今日も嫌がらせを部下達にして楽しむ。 「iというなまえはかぶるかもしれないからあんぜんじゃない! 「Int16 _USER_OBJECT_YAMADA_WRITE_200709062156_FOR_COUNTER 「完璧なソースコードの誕生だ! あれ、山田が何か楽しそうだぞ。 イヂワルしてやれ! 「山田君、このメソッドの名前は[_USER_OBJECT_YAMADA_WRITE_200709062156_FOR_COUNTER]にしてくれ 会議で決まったのだ!
421 名前:デフォルトの名無しさん [2007/09/06(木) 22:06:31 ] >416 じえんはないけどえいえんはあるよ!
422 名前:デフォルトの名無しさん [2007/09/06(木) 22:12:35 ] たなかさんめそっどめいのせんすないからきらいだ! そうだ。こういうときは・・・おーばーろーどがあるじゃないか! やまだはそっとたなかのめそっど名のぷれふぃっくすに OVERROAD_ をつけたした。 これでなまえがかぶることはない。
423 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:15:09 ] スレが壊れだした
424 名前:デフォルトの名無しさん [2007/09/06(木) 22:15:21 ] >418 よくじつにまわすか、ぷれふぃっくすにSTATIC_とかつければかいけつだよ(^^)
425 名前:デフォルトの名無しさん [2007/09/06(木) 22:17:18 ] >423 すまない。ガチでこんなコードの修正依頼にイラついて書いてしまった。 後悔はしていない
426 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:19:11 ] マでやれ
427 名前:デフォルトの名無しさん [2007/09/06(木) 22:22:43 ] for(LOOPCOUNTER_[LOOPCOUNTER_1,LOOPCOUNTER_2]=58;END==TRUE;LOOPCOUNTER_1**) { } やまだすごくね?
428 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:23:33 ] 名前空間の無い言語はきついな
429 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:24:51 ] END==TRUEってなんぞ
430 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:25:40 ] >>428 どちらかというとセンスのないプロ…
431 名前:デフォルトの名無しさん [2007/09/06(木) 22:33:45 ] ちなみに言語はC#だぜW
432 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:35:04 ] ENDがTRUEの間ループをまわすの? 普通に発狂するわ
433 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:39:10 ] もっとやまだのコードがみたい
434 名前:デフォルトの名無しさん [2007/09/06(木) 22:39:56 ] ディフォルトTRUE スイッチFALSEとコメントある。 わからない事もない
435 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:44:32 ] ディフォルトって何?
436 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:45:54 ] マでやれ
437 名前:デフォルトの名無しさん [2007/09/06(木) 22:48:14 ] やまだソース今度ZIPであげるわ
438 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:48:38 ] なんで大文字なんだろ
439 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:49:42 ] 小文字だと予約語などにぶち当たるからだろ。 それかOLD BASICの名残。
440 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 23:08:58 ] まだLOOP==TRUEの方が理解できる
441 名前:デフォルトの名無しさん [2007/09/06(木) 23:56:29 ] ブレークポイント設定してもデバッグができなくなる現象が突然でました。 どの辺確認すればいいのでしょう?構成はDebugでやってますが
442 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:01:03 ] ブレークポイントまでいってない説
443 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:08:40 ] リビルドすれば治る説
444 名前:デフォルトの名無しさん [2007/09/07(金) 00:10:56 ] ブレークポイントはForm_Load内なので、到達してるんです。 性格にはブレークポイントに到達して、デバッグモードになるのに凄い時間がかかって デバッグモード後はF10で1ステップ進ませると、デバッグモード解除されてしまいます
445 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:21:14 ] Form_Loadのブレークポイントの後に続く文があるのに デバッグモード解除されるんだったら、 多分VSがぶっ壊れてるんだと思うよ 再インスコじゃね
446 名前:デフォルトの名無しさん [2007/09/07(金) 00:31:52 ] 不思議なことに、あるプロジェクトでしか現象出ないんだけど、 とりあえず朝一で再インストールしてみます
447 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:37:35 ] >444 デバッグのオプションのネイティブのチェックを外して.NETのみをデバッグするようにしたらどうなる?
448 名前:デフォルトの名無しさん [2007/09/07(金) 00:40:18 ] >>447 すんません。ソースが会社なんで、明日やってみます。thx
449 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 01:27:48 ] 「〜〜〜は開始されませんでした」みたいなエラーメッセージがでて デバッグ開始が異常に遅くなるときあるよね。
450 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 13:13:13 ] >>378 kwsk
451 名前:デフォルトの名無しさん [2007/09/07(金) 15:01:14 ] ソリューションのクリーンとか試してみた?
452 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 16:39:10 ] 怪しいアプリに邪魔されてた事とかあるな
453 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:05:00 ] 質問です。 TextBoxコントロールの枠線の色は変更できますか? できそうにない感じなのですが、そうすると自分で線を描くしかないかと 思うのですが、 Graphics g = this.CreateGraphics(); と取得してコレに対してDrawLineをしてみているのですが、 線が表示されません。 アプローチが間違っているのか、足りないおまじないがあるのか…。 どなたかお知恵をお貸しいただければ幸いです。
454 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:49:42 ] >453 まずその描画はOnPaintでやるべき。 なんとなく、Panelとかの上にTextBoxを載っけてPanelとかに枠線描いた方が楽じゃない?
455 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:59:40 ] >>453 いわゆるオーナードローっぽいことがやりたいのならControlPaintを使うようだから 詳細はMSDNを見るといい が、>>454 に同意だな
456 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 20:19:15 ] >>454 > まずその描画はOnPaintでやるべき。 TextBoxBase 以下は OnPaint が無視されたような気がする。
457 名前:デフォルトの名無しさん [2007/09/07(金) 20:52:07 ] >450 2003までのCPPはマネージとアンマネージはクラス分けされ、同一コード内にはかけても、そこからメモリへの受け渡しが辛かった。 2005はマネージとアンマネージを並べてかける。 つまり int A=42 printf(A.Tostring()); みたいな事ができる。
458 名前:デフォルトの名無しさん [2007/09/07(金) 20:56:41 ] 何かしょぼいが解る人にはマジで!と叫ぶようなコード。
459 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 21:15:38 ] >>453 やってみると意外と面倒だね。 枠の幅が1でよければ、BorderStyle =BorderStyle.FixedSingleにしておいて WM_PAINT捕まえてそこで枠を描画すればできる。
460 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 21:44:08 ] public string フィールドしかないクラスから、全フィールドを連結した 文字列をこさえたい。リフレクション使えばできるかと思ったら、 Type.GetFileds() はフィールドの宣言順を保証しないと言う。 どうすればできる? あきらめるしかない?
461 名前:デフォルトの名無しさん [2007/09/07(金) 21:44:35 ] >453 ピクチャボックスに色を塗る。 テキストをフラット枠線無しにしてピクチャの上に載せる これが一番時間がかからない。 グラフィックで書くのも良いけど、速度は体感できない程度しか変わらない
462 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 21:47:44 ] >>460 そもそもCILにコンパイルされた時点で宣言順なんて保証されないと思うが。 まああきらめた方がいいと思うよ(仮にできたとしても)。
463 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 21:50:44 ] >>461 ぴったり1ピクセル分ずらすのって、むずかしくない?
464 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 21:55:20 ] >>460 Order属性とか自分で定義して全部のフィールドに[Order(2)]みたいに付けといて その順番で連結すれば? それなら余計なメンバを増やしたり動作をいじったりせずにリフレクションだけでできるよ
465 名前:デフォルトの名無しさん [2007/09/07(金) 21:58:07 ] >463 サイズプロパティに打つんだよ。 マウスだとちょっとズレるかもだから
466 名前:デフォルトの名無しさん [2007/09/07(金) 22:01:35 ] >460 ヒント IList delegate
467 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 22:07:41 ] >>466 そんなめんどくさいことするくらいなら初めから連結メソッドを定義するだろw
468 名前:460 mailto:sage [2007/09/07(金) 22:10:44 ] >>464 カスタム属性か。まあ今も Excel から自動生成してるクラスなんで、 それならできそうです。 >>466 plz one more.
469 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 22:12:06 ] >462 確かに宣言順は保証されないんだが、 宣言順に初期化されるという保証があるので事実上宣言順に並んしまうという状態。 それを利用してリフレクションを使って順番通りに文字列をなんかするなんてソースが会社に大量にあって動いている困った状態。 どうにかして宣言順に並んでいないケースって意図的に作れないかな? 順番は保証されてないから動かない可能性があるって言っても動いてるからって理由で修正を拒まれて困ってる。
470 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 22:14:45 ] >468 自動生成クラスなら文字列連結メソッドも自動生成した方がいい。 自動生成クラスが何かのケースで実際に動かして動かないことが発覚するリフレクションより コンパイル時に動かないコードになってることが分かる方がいいよ。
471 名前:460 mailto:sage [2007/09/07(金) 22:56:31 ] >>470 んんん。良くわからんのだが、リフレクションは信用ならないということ? 連結メソッドにしろリフレクションしろ、コンパイルを通した上で、テスト ケースもこなすと思うのだが。
472 名前:453 mailto:sage [2007/09/07(金) 23:33:24 ] >>454 やっぱり重ねるのが楽でしょうか…。 ありがとうございました^^ >>455 了解しました、MSDN見てみます。 ありがとうございました^^ >>456 な!? マジですか!? 処理追ってみます。 >>459 おお、その方法よさそうですね、試してみます^^ ありがとうございました^^ >>461 やはり載せる案多数ですね…。 ありがとうございます^^ とりあえず今日は退勤してまいりましたので、明日にでもいろいろやってみようかと思います。 みなさんありがとうございました^^
473 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:36:50 ] リフレクションは保障されてない メソッドは保障されてるってことだろ? わざわざリフレクション使う内容かどうかわからないし。
474 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:47:59 ] でもこの場合属性を連番で付けるだけなら失敗のしようがないだろ
475 名前:デフォルトの名無しさん [2007/09/08(土) 00:00:35 ] このスレ見てるとC#おもしろそうですね。 アセンブリしかできませんが、挑戦してみようかな
476 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:03:32 ] 君見る目があるね
477 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:05:03 ] >>475 今の流れはどちらかと言うと不毛な話ばっかりだと思ったが。 どこらへんが面白かったか教えてちょ! 正直c#は面白い。
478 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:08:33 ] F#はもっと面白いよ(´・ω・`)
479 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 00:42:40 ] >471 ある日、誰かがメンテをしてそのクラスを手でちょっとだけ修正を入れて 何気なくフィールドを追加しただけなのに挙動が変わったなんてことが起きるかもしれない。 せっかくの連番の属性も意味もわからないままコピペされて番号が重複したりするかもしれない。 そういうときに限ってテストケースの存在も無視される。 普通のメソッドになってれば少なくともそのメソッドの挙動は直接メソッド自体を書き換えられないと変わらないだろ。 マクロで普通のコードを生成できるのに、 リフレクションで処理しやすいようなクラスを用意するってのは本末転倒だろ。 C#のリフレクションはJavaなんかより割と速いけど普通にメソッドを叩くよりかは明らかに遅くなるだろうし。
480 名前:デフォルトの名無しさん [2007/09/08(土) 01:09:54 ] DataGridVewに行を追加したいのですがどうすればいいのでしょうか?
481 名前:デフォルトの名無しさん [2007/09/08(土) 01:46:22 ] asciiファイルからshift-jisで読み込んで、dataGridViewに表示させてるんですが、 この表示された値(2バイト文字)をコピーしてエクセルに貼り付けると文字化けしています。 (テキストファイルなどへのコピーは平気) エクセルへのコピーも問題なく行うにはどうればいいのでしょう?
482 名前:480 [2007/09/08(土) 02:55:09 ] 自己解決しました
483 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 03:42:07 ] そのくらい自己解決してもらわないと困る
484 名前:460 mailto:sage [2007/09/08(土) 08:26:15 ] >>479 自動生成クラスを手でいじったり NUnit かけずに済ます文化がこちらには ないんだが、言わんとしてることはわかった。ありがとう。
485 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 10:06:40 ] dictionaryのキーとして専用の構造体を使うとき、 等値比較演算子を自分で実装しないといけないの? 試してみたら自動でやってくれてるみたいだけど
486 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 10:59:15 ] リフレクション使うのでかなり遅いけど、それでもいいのなら
487 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 13:14:24 ] 構造体なら値比較?
488 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 13:37:18 ] >>487 デフォルトだとValueType.Equalsが使われる。 ValueType.Equalsだが、プリミティブ型のみから構成される構造体なら ビット比較を使うっぽい。 参照型を含んでいたりするとリフレクションでメンバごとに再帰比較してる模様。 これが遅いと言われている。 pc11.2ch.net/test/read.cgi/tech/1173763436/161-185