2014-01-09 64 views
1

爲什麼這個程序輸出是「1」。但它應該給出「空引用異常」,因爲我在xyz()方法中將其設置爲null。爲什麼下面提到的程序不會給出空引用異常?

static void Main(string[] args) 
    { 
     A a = new A(); 
     B b = new B(); 
     b.xyz(a); 
     Console.WriteLine(a.x); 
     Console.ReadKey(); 
    } 
    class A 
    { 
     public int x = 1; 
    } 
    class B 
    { 
     public void xyz(A a) 
     { 
      a = null; 
     } 
    } 

回答

0

您已設置了可變a副本null。當調用方法xyz時,此副本是隱式創建的;這是因爲默認方法調用中的參數是按值傳遞的。

爲了得到你需要按引用傳遞的方法的參數異常:

public void xyz(ref A a) 
{ 
    a = null; 
} 

然後

b.xyz(ref a); 

上就this MSDN page主題文檔。

+0

但是默認情況下,類對象通過引用傳遞。爲什麼我們需要通過「ref」設置? – user3177199

+0

@ user3177199:它們不是通過引用*傳遞的,而是它們是通過值*傳遞的引用。這是一個重要的區別。 – Jon

+0

確定thx的幫助 – user3177199

相關問題