過去に投稿された同様の質問/回答を見たことがありますが、私のものは私が見た他のものとは少し異なります.
基本的に、共通のインターフェースと、それを実装/継承するいくつかのクラスがあります。次に、別のクラスに、インターフェイス IObject によって指定されたオブジェクトに作用する必要があるメソッドがあります。ただし、それぞれに異なる方法で対処する必要があるため、IObject を拡張する具象型ごとにメソッドを個別に宣言する必要があります。
class IObject
{
...
}
class ObjectType1 : IObject
{
...
}
class ObjectType2 : IObject
{
...
}
class FooBar
{
void Foo (ObjectType1 obj);
void Foo (ObjectType2 obj);
}
さて、私にとって明らかな解決策の 1 つは、メソッド Foo を個々のクラス内に配置することで動的バインディングを利用することです。これにより、実行時に正しい Foo が自動的に選択されて実行されます。ただし、これはここではオプションではありません。なぜなら、これらのオブジェクトにどのように作用するかについて複数のモデルを定義しているためです。すべてのモデルをオブジェクト クラスに詰め込むのではなく、オブジェクトを処理するための個々のモデルをそれぞれ独自のクラスにカプセル化します。 .
辞書を使用して実行時に正しいメソッド実装を動的に選択する方法を示すこの投稿を見つけました。私はこのアプローチで問題ありません。ただし、すべてのモデルで 1 回、このようなディスパッチを実行する必要があるとします。IObject とその具体的な実装しかない場合、オブジェクトの実行時の型に基づいて任意の名前のメソッドを呼び出すことができるように、このアプローチを一般化する方法はありますか?
これはおそらく不明確な質問であることは承知していますが、何か助けていただければ幸いです。