私は次のクラスを持っています:
public class Terminal : IDisposable
{
readonly List<IListener> _listeners;
public Terminal(IEnumerable<IListener> listeners)
{
_listeners = new List<IListener>(listeners);
}
public void Subscribe(ref Action<string> source)
{
source += Broadcast;
//Store the reference somehow?
}
void Broadcast(string message)
{
foreach (var listener in _listeners) listener.Listen(message);
}
public void Dispose()
{
//Unsubscribe from all the stored sources?
}
}
しばらく検索したところ、ref キーワードで渡された引数を格納できないようです。ソース引数をリストに追加したり、フィールド変数に代入しようとしても、実際のデリゲートの元の参照への参照を保持できません。私の質問は次のとおりです。
- 参照を再度渡さずにすべてのソースからサブスクライブを解除する方法はありますか?
- そうでない場合、メソッドを介してデリゲートを渡すことでサブスクリプションを維持しながら、クラスをサポートするためにクラスを変更するにはどうすればよいでしょうか?
- リフレクションを使わずにそれを達成することは可能ですか?
- デリゲート/イベントをクラスにラップしてから、クラスをサブスクリプションのパラメーターとして渡すことなく、それを達成することは可能ですか?
ありがとうございました。
編集:ラッパーまたはリフレクションを使用しないと、指定された問題の解決策がないようです。私の意図は、ヘルパー クラスでデリゲートをラップすることなく、クラスを可能な限り移植可能にすることでした。貢献してくれてありがとう。