参照としてIConnection
への参照を渡すInitialize
という抽象メソッドを持つ抽象クラスServer
が必要です。そこから、このクラスから派生したクラスは、のオブジェクトを本質的に特殊化することができるはずです(Initialize
)。これは、2つの抽象メソッド(DataSent
とDataReceived
)を使用したいと思っていることを除いて、問題ありません。このようなクラスの継承者の引数型を特化するにはどうすればよいですか?
何かが、私が欲しいものです:
public override void Initialize(ref IConnection connection)
{
connection = new MySpecialConnection(connection);
}
public override void DataSent(MySpecialConnection connection, byte[] data)
{
}
public override void DataReceived(MySpecialConnection connection, byte[] data)
{
}
はこれを行う簡単な方法はありますか?私は数日間のうちにより多くの部分をジェネリックで遊んできました。私がオンラインで話したことのある人は誰も解決策を考え出すことができませんでした。
解決策があると思う人は:ジェネリックでこれをやろうとしたとき、それはかなり複雑で、分散の問題によって正しく機能したくなかったのです。
'Initialize()'の 'connection'はプロパティのようです。必然的に 'DataSent()'と 'DataReceived()'の 'connection'パラメータと区別できますか? –
必ずしもそうである必要はありませんが、使いやすいようにする必要があります。それ以外の場合は、状態情報のいずれかが必要な場合は、IConnectionをより特殊なタイプにキャストアウトする必要があります。この考え方は、SocketAsyncEventArgs.UserTokenのような状態トークンから離れて、接続の状態を表すために型全体を特殊化することです。 –