[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/05 17:49 / Filesize : 232 KB / Number-of Response : 1017
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part88



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はそういうことを言いたいんじゃないの?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<232KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef