我對這段代碼有點困惑。c# - ref修飾符...參考類型
public static void Foo(A p)
{
p.SomeProp = "ccc";
p = null; // !!!
}
static void Main(string[] args)
{
A p = new A();
Foo(p);
Console.WriteLine("SomeProp is: " + p.SomeProp);
Console.ReadLine();
}
輸出是:
「SomeProp是:CCC」
但我本來期望一個NullReferenceException。
但是,如果我改變它,像這樣,使用ref修飾符:
public static void Foo(ref A p)
{
p.SomeProp = "ccc";
p = null;
}
static void Main(string[] args)
{
A p = new A();
Foo(ref p);
Console.WriteLine("SomeProp is: " + p.SomeProp);
Console.ReadLine();
}
我得到一個NullReferenceException - 第二個是可以理解我。
但是怎麼會這樣呢,在第一段代碼中,p沒有設置爲空,但是該屬性獲取了它的值集?
我的問題是:如果第一段代碼中的Foo方法不是對原始實例的引用,那麼它的p參數是什麼?
Btw。這裏是A類的定義
public class A
{
public string SomeProp;
}
另請參閱:http://stackoverflow.com/questions/186891/why-use-ref-keyword-when-passing-an-object – 2009-09-21 15:56:49