我对这段代码有点困惑。
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 is: 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并没有被设置为null,但是该属性却被赋值了,这是怎么回事呢?
我的问题是:如果第一段代码中的p参数不是对原始实例的引用,那它是什么?
顺便提一下,以下是类A的定义:
public class A
{
public string SomeProp;
}