8

入力パラメーターのないパブリック メソッドを持つクラスが 1 つあります。

 public partial class MyClass: System.Web.UI.MasterPage
   {

      public void HelloWorld() { 
       Console.WriteLine("Hello World "); 
      } 
    }

HelloWorld() メソッドを別のクラスに呼び出したい

public partial class ProductType_Showpt : System.Web.UI.Page
{
     protected void ChkChanged_Click(object sender, EventArgs e)
    {
          MyClass master =(MyClass) this.Master;   
          master.GetType().GetMethod("HelloWorld").Invoke(null, null);
    }
}

しかし、それはこの例外をスローします

Object reference not set to an instance of an object.
4

5 に答える 5

7

あなたのInvokeメソッドはnull最初のパラメーターとしてパラメーターをとるべきではないと思います。

MyClass yourclass = new MyClass();    
MyClass.GetType().GetMethod("HelloWorld").Invoke(yourclass , null);

からの最初のパラメータの場合MethodBase.Invoke

メソッドまたはコンストラクターを呼び出すオブジェクト。メソッドが静的な場合、この引数は無視されます。コンストラクターが静的である場合、この引数はnullであるか、コンストラクターを定義するクラスのインスタンスである必要があります。

于 2013-03-18T07:47:14.827 に答える
2

オブジェクトのインスタンスではなく null でメソッドを呼び出そうとしています。null ではないクラスのインスタンスでインスタンス メソッドを呼び出すことができます。メソッドの最初のパラメーターでクラスのインスタンスを渡しますHelloWorld

MyClass myClassObject = new MyClass();    
MyClass.GetType().GetMethod("HelloWorld").Invoke(myClassObject, null);
于 2013-03-18T07:46:29.290 に答える
2

メソッドを実行するインスタンスを指定する必要があります。

MyClass myClassInstance = new MyClass();
MyClass.GetType().GetMethod("HelloWorld").Invoke(myClassInstance, null);
于 2013-03-18T07:46:49.817 に答える
0

メソッドをマークするか、HelloWorld()メソッドの最初のパラメーターとしてインスタンスをstatic渡す必要があります(以前の回答が述べたように)。MyClassInvoke

于 2019-03-16T17:50:28.527 に答える