[過去ログ]
ふらっと C#,C♯,C#(初心者用) Part137 (1002レス)
ふらっと C#,C♯,C#(初心者用) Part137 http://mevius.5ch.net/test/read.cgi/tech/1523004019/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
985: デフォルトの名無しさん (アウアウエー Sa22-UB1l) [sage] 2018/06/05(火) 12:11:20.04 ID:vCTdp4Eha >>979 class FrameReceivedEventArgs:EventArgs { public byte[] Frame{get; private set;} .... } class CommunicationPort { public even EventHandler<FrameReceivedEventArgs> FrameReceived; .... } class FrameDecoder { public FrameDecoder(CommunicationPort c} { c.FrameReceived += CommunicationPort_FrameReceived; } private void CommunicationPort_FrameReceived((object sender, FrameReceivedEventArgs e) { .... } .... } http://mevius.5ch.net/test/read.cgi/tech/1523004019/985
986: デフォルトの名無しさん (ブーイモ MMbe-CKCa) [sage] 2018/06/05(火) 12:44:05.86 ID:eGZjT6RJM >>985 引数に渡されたものを弄るのは行儀の悪い設計 IReceiverインターフェイスみたいなのを用意してport.AddReceiver(decoder)とするか、 >>979の言葉通りにいったん双方のクラスの外でイベントハンドラで受けて仲介したほうがいい http://mevius.5ch.net/test/read.cgi/tech/1523004019/986
987: デフォルトの名無しさん (ブーイモ MMbe-CKCa) [sage] 2018/06/05(火) 12:51:41.81 ID:eGZjT6RJM >>985がなぜ行儀が悪いか補足しておこうか 普通、オブジェクトを別のクラスのコンストラクタに渡すとき、プログラマは 受け取った側→引数側 の向きの参照ができることを期待する ところが、>>985だとそれが逆なんだよ new FrameDecoder(this.port) としただけで、portがGCされないかぎり作り捨てたはずのFrameDecoderがGCされないという、非直感的なコードになるわけ http://mevius.5ch.net/test/read.cgi/tech/1523004019/987
989: デフォルトの名無しさん (ワッチョイ fa11-W/zB) [sage] 2018/06/05(火) 13:09:28.12 ID:GjVlFAo70 言い回しがようわからんが >>985みたいなのするのが解放されないオブジェクトを量産するっていうのはなんとなくわかる http://mevius.5ch.net/test/read.cgi/tech/1523004019/989
999: デフォルトの名無しさん (アウアウウー Sa09-CKCa) [sage] 2018/06/06(水) 00:18:56.95 ID:+J9HGVUKa >>995 想像力のない人だなあ >>985だと、イベントハンドラの登録を解除しない限り、FrameDecoderが不要になっても 登録先のCommunicationPortよりも先にGCされることは絶対にない。 じゃあ不要になったらイベントハンドラを登録解除できるようにしよう。いつ解除する? それはFrameDecoder自身には分からない。知っているとしたら、それは>>976のいうメインクラスだろう。 登録解除するにはFrameDecoderクラスのDisposeメソッドを呼べ、という仕様にするか? 結局、985のFrameDecoderを正しく扱うには、メインクラス側がそういうクラス外から見ただけでは想像できないFrameDecoderの気難しい仕様を理解した上で、 必要に応じて明示的な解放を行わなくてはならない。 そんなことをするくらいならメインクラス側で明示的に登録・登録解除をやったほうが遥かに素直で分かりやすい。 http://mevius.5ch.net/test/read.cgi/tech/1523004019/999
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.043s