2016-12-01 20 views
0

そのインターフェイスを実装するクラスの参照を使用して、インターフェイスメソッドを呼び出す必要があります。私はそのために反射を使用していますが、私のコードは動作していませんし、nullオブジェクト参照例外が発生しています。コードは以下のとおりです。クラスの参照を使用した呼び出しインターフェイスメソッド

interface IntA 
{ 
    void MethodFirst(); 
} 

interface IntB 
{ 
    void MethodFirst(); 
} 

class ClassA : IntA, IntB 
{ 
    public void MethodFirst() 
    { 
     Console.WriteLine("this.ClassA.MethodFirst"); 
    } 
    void IntA.MethodFirst() 
    { 
     Console.WriteLine("IntA.ClassA.MethodFirst"); 
    } 
    void IntB.MethodFirst() 
    { 
     Console.WriteLine("IntB.ClassA.MethodFirst"); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    {    
     Type t = Type.GetType("ClassA"); 
      t.GetMethod("MethodFirst").Invoke(Activator.CreateInstance(t,null), null); 

     Console.ReadLine(); 
    }   
} 

私がここで間違っていることを教えてください。

+3

は、単にあなたの方法をインターフェイスと呼び出すために、あなたのクラスをキャスト。反射は必要ありません –

+0

おかげでM. kazem Akhgary。それは反射を使って呼び出すインタビューの質問でした。 –

+1

反射を使用するのは専門家レベルのもので、本当に必要なときにのみ使用します。それは非常にまれです。あなたが良いプログラマーなら、あなたは決してリフレクションを必要としません;) –

答えて

1

そのクラスの完全な名前空間を使用してクラスのインスタンスを作成する必要があります。例えば、場合

Type t = Type.GetType("ConsoleApplication1.ClassA"); 

、あなたが特定のインターフェイスからメソッドを呼び出したい場合は -

Type t = Type.GetType("ConsoleApplication1.ClassA"); 
t.GetInterface("ConsoleApplication1.IntB").GetMethod("MethodFirst").Invoke(Activator.CreateInstance(t, null), null); 
+0

ありがとう!出来た。しかし、今はIntB.MethodFirstを呼びたいと思います。どうすればいいですか? –

0
 IntA classA = new ClassA(); 
     classA.MethodFirst(); 
     Console.ReadLine(); 
関連する問題