私は非常に興味深い質問があり、まだ答えは見つかりませんでした。希望、誰かが私を助けることができます。署名は異なるが、お互いに由来する方法
まず私は、私はいくつかの方法でクラスを持って
interface IA {}
class A : IA {}
class B : A {}
次のようなクラス階層を持って、派生クラス
class Test
{
public int Method(object dummy) { return 0; }
public int Method(IA dummy) { return 1; }
public int Method(A dummy) { return 2; }
public int Method(B dummy) { return 3; }
}
のパラメータを持つすべての名前が同じでdiffent署名は、コンパイラはdoesnの文句を言うと、それはすべての異なる署名を認識します。
new Test().Method(new Object()) returns 0
new Test().Method(new A() as IA) returns 1
new Test().Method(new A()) returns 2
new Test().Method(new B()) returns 3
a私が期待したいと思うように。
は今、私の質問に来ます。私は、リフレクション中に、4つの方法のどれが特定のパラメータータイプに最も適しているかを判断する必要があります。つまり、パラメータータイプがtypeof(A)であれば、 "ダミー"シグネチャーで3番目のメソッドを見つけなければなりません。 「A」は、「オブジェクト」のインスタンスであるため
「IsInstanceOfType」または「IsAssignableFrom」は、動作しません。タイプが正確に一致するかどうか最初に確認できますが、これはインタフェースを受け入れない場合にのみ問題を解決します。
誰にでも提案がありますか?
これで何を達成しようとしていますか?オーバーロードは正確に同じで、実行時に適切な関数を呼び出します。ユースケースに言及して、問題をよりよく理解できるようにしてください。 – Harsh
等価性チェックがインターフェイスに関する問題を解決しない理由を明確にしてください。 –
'IA'でenumを使用して各クラスのコンストラクタでその値を設定することはできませんか?その後、列挙型の値をチェックして、手動で特定のメソッドを呼び出します。 –