对象行为

Vij*_*jay 2 c#

任何人都可以解释下面的代码的行为.下面代码的输出是字符串"str",i的值是100.

但为什么会这样呢?设置对象c1 = null后,为什么不为null?

public class Class1
{
    public int i;
    public Class1()
    {
        i = 10;
    }    

    public string method1()
    {
        return "str";
    }
}

public class Class2
{
    public void method2(Class1 c1)
    {
        c1.i = 100;
        c1 = null;
    }
}

    void main()
    {
        Class1 c1 = new Class1();
        Class2 c2 = new Class2();
        c2.method2(c1);
        Response.Write(c1.method1());
        Response.Write(c1.i.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

cjk*_*cjk 5

当您调用时,method2(Class1 c1)您将传递对象的引用副本,而不是对象本身(或对它的引用).设置时,c1 = null您将引用的副本设置为null,而不是对象.

您可以通过将方法签名更改为此来获得您期望的行为:

method2(ref Class1 c1)