1. ホーム
  2. .net

.NETでオーバーロードされたメソッドを呼び出すためにReflectionを使用する方法

2023-09-02 17:16:50

質問

.NET (2.0) でリフレクションを使用してオーバーロードされたメソッドを呼び出す方法はありますか。 私は、共通の基本クラスから派生したクラスを動的にインスタンス化するアプリケーションを持っています。 互換性のために、この基本クラスは同じ名前の2つのメソッドを含んでいます、 1つはパラメータ付き、もう1つはパラメータなしです。 Invokeメソッドでパラメータなしのメソッドを呼び出す必要があります。 今、私が得るのは、曖昧なメソッドを呼び出そうとしていることを伝えるエラーだけです。

はい、私は ができました。 はオブジェクトを私の基底クラスのインスタンスとしてキャストし、必要なメソッドを呼び出すだけです。 最終的にそれは が起こるでしょうが、今は内部的な複雑さがそれを許さないでしょう。

どんな助けでも偉大です! ありがとうございます。

どのように解決するのですか?

どの方法で解決するかを指定する必要があります。

class SomeType 
{
    void Foo(int size, string bar) { }
    void Foo() { }
}

SomeType obj = new SomeType();
// call with int and string arguments
obj.GetType()
    .GetMethod("Foo", new Type[] { typeof(int), typeof(string) })
    .Invoke(obj, new object[] { 42, "Hello" });
// call without arguments
obj.GetType()
    .GetMethod("Foo", new Type[0])
    .Invoke(obj, new object[0]);