我对这段代码有点困惑。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