[過去ログ] ふらっと C#,C♯,C#(初心者用) Part137 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
985
(4): (アウアウエー Sa22-UB1l) 2018/06/05(火)12:11 ID:vCTdp4Eha(1/4) AAS
>>979
class FrameReceivedEventArgs:EventArgs
{
  public byte[] Frame{get; private set;}
  ....
}

class CommunicationPort
省16
986
(1): (ブーイモ MMbe-CKCa) 2018/06/05(火)12:44 ID:eGZjT6RJM(1/2) AAS
>>985
引数に渡されたものを弄るのは行儀の悪い設計
IReceiverインターフェイスみたいなのを用意してport.AddReceiver(decoder)とするか、
>>979の言葉通りにいったん双方のクラスの外でイベントハンドラで受けて仲介したほうがいい
987: (ブーイモ MMbe-CKCa) 2018/06/05(火)12:51 ID:eGZjT6RJM(2/2) AAS
>>985がなぜ行儀が悪いか補足しておこうか
普通、オブジェクトを別のクラスのコンストラクタに渡すとき、プログラマは 受け取った側→引数側 の向きの参照ができることを期待する
ところが、>>985だとそれが逆なんだよ
new FrameDecoder(this.port) としただけで、portがGCされないかぎり作り捨てたはずのFrameDecoderがGCされないという、非直感的なコードになるわけ
989
(1): (ワッチョイ fa11-W/zB) 2018/06/05(火)13:09 ID:GjVlFAo70(2/2) AAS
言い回しがようわからんが
>>985みたいなのするのが解放されないオブジェクトを量産するっていうのはなんとなくわかる
999: (アウアウウー Sa09-CKCa) 2018/06/06(水)00:18 ID:+J9HGVUKa(1) AAS
>>995
想像力のない人だなあ
>>985だと、イベントハンドラの登録を解除しない限り、FrameDecoderが不要になっても
登録先のCommunicationPortよりも先にGCされることは絶対にない。
じゃあ不要になったらイベントハンドラを登録解除できるようにしよう。いつ解除する?
それはFrameDecoder自身には分からない。知っているとしたら、それは>>976のいうメインクラスだろう。
登録解除するにはFrameDecoderクラスのDisposeメソッドを呼べ、という仕様にするか?
省3
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.043s