2016-12-01 102 views
0

調用接口方法我想調用一個接口方法使用實現該接口的類的引用。我正在使用反射,但我的代碼不工作,我得到空對象引用異常。代碼如下:使用參考類

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();