インターフェイスメソッドがあります
public void Execute(ICommand command);
既知のサブタイプを適切なメソッド実装に渡しICommand
、Handle(SpecificCommand command)
未知のタイプの一般的な処理を行う必要があります。そうするための普遍的な(つまり、巨大なスイッチを必要としない)方法を探しています。
Handle(command as command.GetType()); // this obviously does not compile
ハンドラーを何らかの方法で登録できることはわかっています。たとえば、ハンドラーをデリゲートとしてディクショナリに格納できますが、これにはまだ処理ロジックを複製する必要があります (特定のHandle(...)
メソッド シグネチャで 1 回、デリゲート要求で 1 回)。クラスをリフレクションで調べて (Handle(XXX command)
メソッドを探して) ディクショナリを作成すると、パフォーマンスが低下します。
Execute(ICommand command)
要約すると、コンパイル時にどのタイプであるかを知らなくても、具体的なタイプを必要とするメソッドを呼び出すために、オブジェクトをダウンキャスト (への呼び出しによってアップキャスト) するにはどうすればよいでしょうか。