1 名前:デフォルトの名無しさん mailto:sage [2015/07/25(土) 16:14:05.15 ID:I42JqLkf.net] ■Visual Studio 2013 Community & Express(無償の統合開発環境)等はこちら www.visualstudio.com/downloads/ ■コードを貼る場合はこちら ideone.com/ ■前スレ C#, C♯, C#相談室 Part87 [転載禁止](c)2ch.net peace.2ch.net/test/read.cgi/tech/1427558696/ ■次スレは>>970 が建てる事。 建てられない場合は他を指定する事。
692 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 15:21:00.93 ID:/7MwCGkP.net] なんでいつも単発IDなんですかね
693 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 15:48:52.90 ID:CmRZDEoS.net] 単発が嫌なら見るなよ
694 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 15:52:52.92 ID:mvfSohk+.net] >>682 IDがきちんと出るようにするだけの技術力がないから…
695 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 20:40:58.44 ID:UIihvy++.net] C#って内部実装変えただけでも依存するアセンブリビルドしなきゃなの?
696 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 20:45:58.83 ID:xp4qRvA3.net] 必要なし
697 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 21:02:14.07 ID:aDhIIP+g.net] ザマリン標準化まだ時間かかりそうですか
698 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 21:25:54.27 ID:vU2SL/AS.net] Xamarinは目先の金儲けしか頭にないから期待しても無駄
699 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 21:46:54.78 ID:8rH+FULH.net] >自作クラスで継承以外で引っ張ってきている場合、必要ならデストラクタにその順通り書けばよく、 これ正しいの?
700 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 22:31:14.60 ID:vU2SL/AS.net] そのファイナライザ内だけで完結するんならそりゃそうだろ ・
701 名前:AとBが両方ともアンマネージリソースを抱えている ・AがBを参照している ・ネイティブライブラリの仕様でBはAより先に解放しなければならないと決まっている こういう状況では当然単純にAとBのファイナライザに頼るわけにはいかない Bにはファイナライザを実装しないでAのファイナライザ内でBのリソースを解放し、 その後にAのリソースを解放するといった工夫が必要になる [] [ここ壊れてます]
702 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 23:17:12.96 ID:4CFfNfbx.net] >>674 すまん、その通りだ。C#ではアンマネージドコードは禁止とは知らなかった。 解放しているのはunsafeで生ポインタだけか。 インラインアセンブラが出来るというのを見た覚えがあるのだが、気のせいだったようだ。 デストラクタも継承/オーバーロード禁止だから、>>671 の言うとおり、staticにしか使えない。 C++からポーティングするなら、 デストラクタ内のは全部Disposeに移動し、そこで手動で親を呼んでおけばいい気がする。 これだとクラス内だけで留まる。 リソース解放タイミングを規定したいのなら手動でDisposeを呼ぶか、usingだね。 ただ、呼ばなくてもセグフォにはならないはず。 MSDNには > C++ 経験者が C# で開発する場合 > デストラクタ : C# は、アンマネージ リソースを確定的に解放する場合の構文が異なります。 > デストラクタ > using ステートメント (C# リファレンス) > https://msdn.microsoft.com/ja-jp/library/yyaad03b(v=VS.90).aspx だけだから、推奨はusingのようだ。 マネージドコードだけしか使えないのなら、本質的なリークはどうやっても発生しないように思える。 一時的なリソース枯渇はあり得るけど、例えばGDIなら描画しまくるアプリ(ゲーム等)でなければあまり気にしなくてもいいのでは。
703 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 23:21:14.35 ID:agiYVVps.net] >リークはどうやっても発生しないように思える こういう馬鹿がプログラミングの真似事をするとロクなことがない
704 名前:デフォルトの名無しさん mailto:sag [2015/08/24(月) 23:23:09.51 ID:163KCsEM.net] 簡潔に一度だけ言うね ID:4CFfNfbxはあと三年ROMってから それからカキコしようね
705 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 23:26:49.44 ID:OjRQ25eS.net] これさー メモリ以外のリソース、たとえばウィンドウハンドルやGDIオブジェクトetcがさー 枯渇とまでいかなくても、使いすぎと感知したタイミングでGCが発動する仕組みが.Net側にあれば、 usingとか、ファイルなんかの特殊な事例以外では、要らなくなるのでは? GC発動のトリガーがメモリだけに依存しているから、いろいろ心配になるわけで
706 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 23:27:45.15 ID:vU2SL/AS.net] ファイナライザ内で別のオブジェクトにアクセスするのは基本的には問題ないぞ その別のオブジェクトがファイナライザを持ってる場合には 既にファイナライザが呼び出されて無効になっている可能性があるからダメというだけ ファイナライザを持ってるオブジェクトから参照で辿れるオブジェクトはどのみち全部一度復活して GCを妨害してしまうから、アクセスすることが特にGCの妨げになるということもない 一番悪いのは「ファイナライザを実装すること」自体な
707 名前:デフォルトの名無しさん mailto:sage [2015/08/24(月) 23:57:38.17 ID:e5Jihg5N.net] ファイナライザに実装すべきなのは、安全装置だけだろう 例えばアンマネージドのハンドルを握っている場合 ハンドルはIntPtrだから、別のクラスに入れるといったことをせず直接フィールドに配置しているなら アクセス可能だから、ここでリ参照カウンタをダウンすれば一応解放は可能 fopenみたいなものを相互運用している場合もハンドルとstatic関数をdllから呼び出せるなら バッファのフラッシュは諦めるとしてもファイルを閉じることくらいはできる いずれも最終手段レベルだね
708 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 00:04:34.64 ID:uHUYRmLo.net] >>691 リーク問題については、あまり期待しないほうが良い Excelの相互運用なんかをすると、当マイクロソフト製なのに結構厄介だし、洩れまくるし 自作でやってもなかなか糞な事になる
709 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 00:42:16.41 ID:FzRJlm7d.net] すいません言い直します。 ・C#では、正しく構成されたクラスを使用している限り、本質的なリークは発生しない。 (明示的にDisposeしなくてもいつか回収される《=Finalize時にDisposeが呼ばれる》) じゃないかな? もちろん.NET謹製のはリークしない。 自作クラスでアンマネージリソースを使う場合、MSDNによると、 ・Disposeを実装し、SafeHandleでアンマネージリソースをラップする。←こっちがオススメ ・Finalizeを実装する。 のどちらかをやっておけばいいはず。 > https://msdn.microsoft.com/ja-jp/library/498928w2(v=vs.110).aspx だからリークしてるのであれば、自作クラスの構成がまずいのだと思うのだが。 もちろんクラスの構成はC++流(デストラクタ)ではなくC#流(上記)にしないといけない。
710 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 00:50:30.42 ID:wg5Da8me.net] ListAとListBの中身を1つずつ比較して、ListBの内1つがListAに無かったらそのオブジェクトを追加し 同じものがあれば追加しないと言う機能を作りたいのですが、foreachだと例外が出て、 for文だと無限ループになってしまいどうやっても上手く実装できませんでした。 一体どうすればListの中身を1つずつ比較して問題なく追加する事が出来るのか教えていただけないでしょうか
711 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 00:57:16.45 ID:bwlYR2I5.net] 問題が起こる、最小のコードをアップしなさい
712 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 01:11:01.00 ID:wg5Da8me.net] 色々書き換え続けて最終的にコンパイルすら通らなくなったんですが多分こんな感じです。 if (ListA.Count == 0) foreach (var li in ListA.a) ListB.Add(li); else for(int i=0; i < ListB.Count; i++){ for (int x = 0; x < ListA.Count; x++){ if (ListA.a[x] != ListB.a[i]) ListB.Add(ListA.a[x]); }}
713 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 02:03:56.13 ID:bwlYR2I5.net] for( a: A ) for( b: B ) {
714 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 02:07:01.06 ID:bwlYR2I5.net] 擬似コードですが、これでどうでしょう for( a: A ) { bool found = false; for( b: B ) { if( a == b ){ found = true; break; } } if( !found ){ B.push_back( a ); } }
715 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 02:56:24.98 ID:wg5Da8me.net] よく考えてみたら1つずつ比較してる最中、違った瞬間に追加するってコードになってました。 それで調べたら配列の中を比較するIndexofという機能をついさっき知って実装したところ、上手く動きました。
716 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 04:17:23.94 ID:ljTVrax0.net] ListB = ListB.Union(ListA).ToList();
717 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 07:28:11.84 ID:uHUYRmLo.net] >>698 shared_ptr weak_ptr の使い分けのように仕組みを意識して使わないと システム任せだと無理があるんだよ、SafeHandleを使えば万事解決という訳にはいかない そろそろ諦めなはれ、アンマネージと相互運用したければ覚悟決めるしかねーですw
718 名前:デフォルトの名無しさん [2015/08/25(火) 10:56:12.32 ID:y1FTBoUo.net] アンマネージドとかどういう場面で使うんですか? C言語とかの領域ですよね? 本見てもどういう場面で使うのか乗ってないんですが
719 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 11:03:08.95 ID:aUx99M6r.net] アンセーフ?
720 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 11:33:21.01 ID:Wpti2W5K.net] SafeHandleってサーバーで複数のドメインが1プロセスに同居するような特殊なシステムでない限り何の意味もないんだけどな 使いたがる連中のなかでそれを正しく理解してるのは少ない
721 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 11:43:43.66 ID:lyj94kL0.net] まあ、C#は元々トロイからね、別に頑張って速くしたりするのは無駄だよね?(´・ω・`)
722 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 12:20:15.95 ID:ya7qPQ7D.net] トロイ?ゆうちゃん?
723 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 12:57:13.30 ID:UmUy/CWK.net] >>707 普段コンビニとか外食でメシを食ってるひとが まな板と包丁買ってきて自分で魚をさばくような話 君はずっとグルメガイドを見てればいい
724 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 13:09:56.76 ID:uHUYRmLo.net] Dispose不要なんて自分ルールを広めようとしてもそうはいかないから 早めにルールに従ってDisposeをキチット実行するよう修正しましょう そうしないと後の修正で口から泡を吹く羽目になりますよって話ですw
725 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 13:33:31.83 ID:yb6n8Wdy.net] 死ね単芝
726 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 21:54:59.46 ID:evM6WMfUm] >>710 要所要所をアンセーフにするとかngen使うとかすれば、かなり高速化出来る場合もある。 GCの問題があるから、本当に高速なリアルタイム処理は苦手だけど。
727 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 18:38:02.96 ID:cRNFEmJ6.net] 頭の中がVB6で止まっているのでしょう
728 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 18:40:19.98 ID:cRNFEmJ6.net] VB6に対して失礼でした
729 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 21:16:04.98 ID:11iB37Vu.net] >>698 FromHandleとか逆にハンドルを取得する系はIntPtrしか受け付けてくれないから、不要になった時にうまく解放しないといけないのが割と面倒 理解不足も含めて、メモリリークさせてるサンプルはよく見かける あとは、メインフォームとか静的なイベントに参照にぎられてるとかもちゃんと意識しないと危険
730 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 22:00:39.66 ID:FzRJlm7d.net] >>706 ,717 個人的にはDisposeを使う方がお行儀がいいのは認める。 ただ、C#の思想としては、「タイミングは規定できないが、解放はシステム側で保証するから、 面倒なことを考えずに具だけに集中しろ」ということなのだと思う。 だから、クラスをきっちり書けば出来そうな気もするし、それに向けて整備していっているはず。 とはいえ、俺はGUI(描画)に使っている程度で、そんなに本格的に使っていない。 だから命中していないだけで、言われているケースがありそうだというのはなんとなく感じる。
731 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 22:03:49.42 ID:bwlYR2I5.net] >解放はシステム側で保証するから メモリに関してだけはそのとおりですね
732 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 22:07:38.08 ID:FzRJlm7d.net] >>707 アンセーフはこれ。見にくくなるが速くなる。 www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_021/csharp_abc05.html アンマネージドはVC++の機能で、SSEとかを使いたいときに使う。
733 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 22:13:15.62 ID:Y9IbSqw2.net] >>720 バカはリソース解放の必要性が理解できないので説明するだけ無駄
734 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 22:17:53.09 ID:JrnVqkd7.net] >アンマネージドはVC++の機能で、SSEとかを使いたいときに使う。 はぁ…… 何言ってんのこいつ C++から来てなんでも知ってるつもりのバカヤロウじゃん
735 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 22:41:07.48 ID:bwlYR2I5.net] たぶん句読点の位置がおかしい アンマネージドは、VC++でSEEとか使いたいときに、使う が正解なのかしら 知らんが
736 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 22:41:34.05 ID:bwlYR2I5.net] SEE → SSE ごめんね
737 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 23:06:00.33 ID:Wpti2W5K.net] >>721 これはアンマネージコードではなくアンセーフコード アンセーフコードもマネージコードには違いない ちなみにこのリンク先の例はunsafeだから速いのではなく、GetPixel/SetPixelのAPIがクソ遅いだけ .NET2.0以降ならLockBitsがあるから一旦配列に丸ごとコピーして処理後に書き戻せばunsafeなんか使わなくても十分に速い
738 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 23:08:27.34 ID:rPHzO56e.net] C++君って先月くらいからいるけど、いつ死ぬの?
739 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 23:29:15.56 ID:uHUYRmLo.net] >>727 が死ねばいいんだよ、お前が一番屑だから というかC++の上がり人はどう考えても一人じゃないだろ 見た感じ多くはゲーム系の人かな
740 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 23:35:33.69 ID:uHUYRmLo.net] GetPixel/SetPixelが遅いというよりも、プロセス間通信が仕組み的に粒度が小さい処理に向いてないという感じかな
741 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 23:42:25.80 ID:87HoKT0r.net] >>721 これはひでえな LockBits使えば十分だろ
742 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 23:44:06.08 ID:IDnYKic2.net] いつの時代の何を解説するためのサンプルかぐらい読めよ...
743 名前:デフォルトの名無しさん mailto:sage [2015/08/25(火) 23:57:53.14 ID:FzRJlm7d.net] これな。十分速いが、それでも倍違うけどね。 daisy64.blogspot.jp/2009/01/getpixel.html マネージドコードの例は不要だと思って省略した。 実際は#pragma unmanagedと#pragma managedでソース上で関数単位で切り替える。
744 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 00:16:40.27 ID:LkVTB1JB.net] >>732 お前は何を言っているのか そのリンク先の例はunsafeも含めて全部れっきとしたマネージコードだ C++/CLIの#pragma unmanaged (これは本当にネイティブコードになる)とは全く違う
745 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 00:22:51.89 ID:LkVTB1JB.net] >>732 よく見たらこのサンプル意味不明だな r, g, bの値を使ってないから、最適化で消えてると思われる 実質的にはunsafe全く関係なくてMarshalCopyの時間を測ってるだけだね
746 名前:731 mailto:sage [2015/08/26(水) 02:05:24.84 ID:N7Jdy9nG.net] 731内、 × マネージドコード ○ アンマネージドコード 最適化がかかって全部抜けるのならGetPixelのコードが最速になる。 そうなってないんだから、抜けてはいない。
747 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 02:09:45.86 ID:KP8nmGdk.net] メソッド呼び出しが、最適化で勝手に削除されるわけねーだろ 何の副作用が有るか、わかりゃしないのに
748 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 02:13:08.08 ID:KP8nmGdk.net] 分かっていると思うけど、 逆に言えば、メソッド呼び出しが無いのなら、 無駄な計算は最適化で削除されうるってことだぞ
749 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 08:04:18.96 ID:0fCLXGvh.net] 相変わらずレベルの低い話
750 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 08:27:19.17 ID:pUWj3Ef8.net] ああ、思い出した レベル連呼クンって前にもいたよね
751 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 08:29:29.18 ID:gbsTgmpf.net] VB6スレと同じ人達が話してるのかい
752 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 08:59:00.05 ID:DnnAf/8j.net] VB6スレなんてあったっけ
753 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 09:15:42.60 ID:ElP7lUPJ.net] C#精神病院 Part88
754 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 11:18:16.79 ID:dP9T8Aj9.net] >>719 そこまで崇高な理想を持って開発されてるとは思えないが タイミングがわからないおかげで使用中のハンドルが開放される可能性への対策も必要になるし あと、マネージリソースだけじゃなくて、固定したGCHandleを持ってればGCのパフォーマンスへの影響もでかい
755 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 17:11:34.36 ID:qrjLQtVJ.net] DataGridViewでユーザーが列幅を変更する場合列の境界をドラッグ しますが、横スクロールバーが表示される程列数や個々の幅がある 場合に最後の列幅が変更できません。 どのようにマウスで変更するのでしょうか。
756 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 20:08:44.10 ID:N7Jdy9nG.net] >>736 ,736 メソッドの部分は必ず実行され、その後の部分は最適化されているかも、ということで了解した。 LockBits/unsafeの比較は当てにならないね。 異常に速度差があるし、メソッド以外は全部抜けているかも。
757 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 20:16:21.46 ID:N7Jdy9nG.net] >>743 > GCHandle 構造体 > [SecurityPermission(SecurityAction.Demand, UnmanagedCode=true)] > https://msdn.microsoft.com/ja-jp/library/system.runtime.interopservices.gchandle(v=vs.110).aspx なるほど、C#でもdllと接続するとUnmanagedCodeを意識しないと駄目なんだな。 > タイミングがわからないおかげで使用中のハンドルが開放される可能性への対策も必要になるし GC.Collectで起動は出来るみたいだぞ。 GC.SuppressFinalizeというやばそうなものもあるが、GCを止めることは出来ないね。 上記GCHandle例のようにブロックスコープで囲える範囲なら、GC.KeepAliveの方が軽そうだ。 > https://msdn.microsoft.com/ja-jp/library/System.GC(v=vs.110).aspx システムリソースと言っても所詮はメモリだし、 x64みたいにアドレス空間が広ければ、OSが動的確保すれば収まる話ではある。 だからいずれは気にしなくてよくなると思うよ。 (ただそのときでもDisposeしたほうがいいのは事実だが)
758 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 20:56:01.03 ID:LkVTB1JB.net] >>746 ファイナライザでKeepAliveするのは意味がない KeepAliveしたところで参照している他のオブジェクトのファイナライザが先に呼び出される可能性は防げないし、 ファイナライザの実行が終わる前にthisやその他参照しているオブジェクトがGCに回収されてしまうようなことは無いからね
759 名前:デフォルトの名無しさん mailto:sage [2015/08/26(水) 21:39:21.41 ID:pUWj3Ef8.net] >>746 もう来んなよ
760 名前:デフォルトの名無しさん mailto:sage [2015/08/27(木) 08:03:55.06 ID:Sd5tuK/H.net] お前が来るなよw
761 名前:デフォルトの名無しさん mailto:sage [2015/08/27(木) 17:01:34.76 ID:H9Zj5Bn1.net] internalなインターフェースでも、internalで実装出来ないのね。 なんでだろ。 明示的実装だとeventは自動実装してくれないのね。 ちょっと不便。
762 名前:デフォルトの名無しさん [2015/08/27(木) 18:33:33.61 ID:4ooez7+r.net] 以下のようなことをしたいのですが、 メソッド名が重複するため上手くいきません。 ある変数のスーパークラスを上書くようなことはできないのでしょうか? public abstract class A{ public abstract MyClass instance {get;} } public abstract class B<T> : A where T ; MyClass{ public T MyClass instance {get;} }
763 名前:デフォルトの名無しさん mailto:sage [2015/08/27(木) 18:40:58.45 ID:3m4FcQPk.net] >>751 全部捨てろ そんなことをしようとせずに済んだ世界を想像し 可能ならば来た道を戻って設計しなおすといい
764 名前:デフォルトの名無しさん mailto:sage [2015/08/27(木) 18:44:49.92 ID:CaKJnHAU.net] >>752 だけ読むと凄くカッコイイ
765 名前:デフォルトの名無しさん mailto:sage [2015/08/27(木) 18:45:04.56 ID:0465F1pc.net] つーかMyClassとわかってるならTにする意味ないでしょ
766 名前:デフォルトの名無しさん mailto:sage [2015/08/27(木) 19:34:06.84 ID:M7ObSeqi.net] 何がしたいんだかよくわからん MyClass はなんだかの形で定義? class B<T> は、もはや修正してエラーもなくせない メソッド名が重複するという問題にたどり着けんw
767 名前:デフォルトの名無しさん [2015/08/27(木) 21:05:28.92 ID:4ooez7+r.net] TはMyClassの継承関係です。 AとかBじゃ分かりにくいですね。 public abstract class 田中{ public abstract 行動 instance {get;} } public abstract class 修行した田中<料理> : 田中 where T ; 行動 { public 料理 instance {get;} } はじめからTつければいいじゃんとか思うかもしんないけど、 ジェネリックの共変性とかの問題があったりしてこんな実装になってます。
768 名前:デフォルトの名無しさん mailto:sage [2015/08/27(木) 21:16:20.73 ID:dljCNrWS.net] まず用語とやりたいことと質問を整理してくれる? お前の示したコードにメソッドも変数もないし、空想上の文法を示して以下のようなこと、で伝わると思うの?
769 名前:デフォルトの名無しさん mailto:sage [2015/08/27(木) 21:19:19.33 ID:crZaWZ5K.net] いや…これはシンプルに無視案件だろ こいつに関わってもなんの実りも無い
770 名前:デフォルトの名無しさん mailto:sage [2015/08/27(木) 21:27:08.41 ID:hme97lr4.net] >>756 public interface I田中{ 行動 instance {get;} } public abstract class 修行した田中<料理> : I田中 where 料理 ; 行動 { override 行動 I田中.instance { get { return this.instance; } } public 料理 instance {get;} } 何がしたいのかさっぱり分からんがこういうことか?
771 名前:デフォルトの名無しさん mailto:sage [2015/08/27(木) 21:35:49.89 ID:lF/OrL4X.net] 山田かもしれん
772 名前:デフォルトの名無しさん [2015/08/27(木) 21:46:52.77 ID:4ooez7+r.net] public abstract 行動 strategy {get;} を public override 料理 strategy {get;} に上書きしたいです。 まとめるとこうです。 1.オブジェクトの行動を戦略ポリモーフィズムで実現したい 2.継承クラスから戦略をジェネリックに呼び出したい 3.基底クラスの戦略呼び出しは継承クラスの戦略を呼び出す(abstract) 4.ジェネリックの共変性(.net3.5を利用)の問題で3を基底<T>およびメンバTとするのは、 その他のオブジェクトでキャストが膨大に発生するため、ジェネリックを持たない基底クラスを用意した
773 名前:デフォルトの名無しさん [2015/08/27(木) 21:56:46.79 ID:4ooez7+r.net] >>759 そういうことです! たぶんできました!ありがとうございます
774 名前:デフォルトの名無しさん mailto:sage [2015/08/27(木) 22:22:03.15 ID:pO3unHFi.net] エスパー乙
775 名前:デフォルトの名無しさん mailto:sage [2015/08/27(木) 23:39:03.06 ID:sO/8ZJev.net] ようわからんから寝るわ 明日は定時にあがって彼女とデートだ
776 名前:デフォルトの名無しさん mailto:sage [2015/08/28(金) 00:22:50.64 ID:DVJpBS2x.net] ここ数年定時で上がった事無いや。 せめて残業30時間未満希望。
777 名前:デフォルトの名無しさん mailto:sage [2015/08/28(金) 06:40:20.71 ID:Sz74PPpb.net] とりあえず "料理 ; " の ';' は何だよって感じの所の修正をして欲しかったな エラーが「メソッド名が重複」になるようなコードにしてから、問い合わせろよって感じ わけわかんねーよw
778 名前:デフォルトの名無しさん mailto:sage [2015/08/28(金) 06:55:57.02 ID:Sz74PPpb.net] >>761 どうしてもそのようにしたければ、二段階に分けてやればいいんじゃねかな インターフェイスが正解だが public class 行動 { } public abstract class A { public abstract 行動 instance { get; } } public abstract class BBase<T> : A where T : 行動 { public override 行動 instance { get; } } public abstract class B<T> : BBase<T> where T : 行動 { public new T instance { get; } } public class 料理 : 行動 { } public class 所望の利用方法 : B<料理> { } リフレクション関係の.Net Frameworkのソースを読んでいたらこういうのに出会ったよ 以前のバージョンで公開してしまったが、互換性を維持しつつ改めて中身隠して継承したいという感じの部分で
779 名前:デフォルトの名無しさん [2015/08/28(金) 10:09:33.73 ID:bO0aCwDR.net] >>767 それだと基底クラスにキャストされているときに呼ばれると基底のメソッドが呼ばれてしまうので今回の要件ではまずいです。
780 名前:デフォルトの名無しさん mailto:sage [2015/08/28(金) 11:43:18.34 ID:Sz74PPpb.net] >>768 基底クラスの変更はBBaseの方でやるの、二段階に分けるという事
781 名前:デフォルトの名無しさん [2015/08/28(金) 15:45:12.11 ID:O/DjZ5xn.net] BBase<T>からその上位のBのinstanceを呼べないのでまずいです。
782 名前:デフォルトの名無しさん mailto:sage [2015/08/28(金) 15:48:24.22 ID:Sz74PPpb.net] なんでそこが問題やねんwww まぁ、互換性がうんぬんとかクリティアルな問題がある訳じゃなさそうだし interface 版でいいと思う それでやれば良かろう
783 名前:デフォルトの名無しさん [2015/08/28(金) 17:04:25.71 ID:bO0aCwDR.net] >>771
784 名前: そこがクリティカルだと何度も申し上げていますが。 解決したのでもういいです。 [] [ここ壊れてます]
785 名前:デフォルトの名無しさん mailto:sage [2015/08/28(金) 17:05:03.05 ID:ZmO5l3R/.net] へーすごいじゃん
786 名前:デフォルトの名無しさん mailto:sage [2015/08/28(金) 19:26:06.38 ID:jkdHSky5.net] 式木が全然わかんねぇ 動的に検索条件変えるのにつかいたいが
787 名前:デフォルトの名無しさん mailto:sage [2015/08/28(金) 19:27:16.67 ID:GiTthi+A.net] bbaseってのはババアのSE(システンエンジニア)のことですよね?
788 名前:デフォルトの名無しさん mailto:sage [2015/08/28(金) 19:58:34.57 ID:Lygpatgh.net] リソースの解放順序をコントロールするクラスを1回作ってしまえばDisposeの明示的呼び出しは完全に不要になるね
789 名前:デフォルトの名無しさん mailto:sage [2015/08/28(金) 20:01:28.39 ID:LXLt4eax.net] またDispose君か フランスパン目に突き刺して死ね
790 名前:デフォルトの名無しさん mailto:sage [2015/08/28(金) 20:05:55.57 ID:CjkSJ7ex.net] >>774 アホなことは考えるな 普通にクエリビルダ使え
791 名前:デフォルトの名無しさん mailto:sage [2015/08/28(金) 20:49:33.85 ID:Sz74PPpb.net] >>776 いや、そこは普通にDispose使えよ、得体のしれないことするなw
792 名前:デフォルトの名無しさん mailto:sage [2015/08/28(金) 20:55:43.87 ID:ls1PRuKg.net] アンマネージドなリソースをIDisposableなオブジェクトでラップするのは基本だろ え? >756はそういうことを言いたいんじゃないの?