为什么下面提到的程序不给出null引用异常?

时间:2014-01-09 10:59:10

标签: c#-4.0

为什么此程序输出为“1”。但它应该给出“Null Reference exception”,因为我在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;
        }
    }

1 个答案:

答案 0 :(得分:0)

您已将变量a副本设置为null。调用方法xyz时隐式创建此副本;这是因为默认情况下,方法调用中的参数是按值传递的。

要获得异常,您需要通过引用传递方法的参数:

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

然后

b.xyz(ref a);

this MSDN page上有关于该主题的文档。