在清空我的对象后,我在变量 c1.a=30 和 c1=namspace_name.class_name 中获取值

本文关键字:c1 name 获取 namspace class 对象 我的 清空 变量 | 更新日期: 2023-09-27 18:36:37

class C
{
    int a;
    int c=10;
    void F(C c1)
    { 
        c1.a = 30;
        c1 = null;
    }
    public static void Main(string[]args)
    {
        C c1 = new C();
        c1.a = 10;
        c1.F(c1);          
        Console.WriteLine(c1.a);
        Console.WriteLine(c1);
    }
}

在清空我的对象后,我在变量 c1.a=30 和 c1=namspace_name.class_name 中获取值

c1在你的

例子中是一个alias,而是一个新的局部变量,引用通过值传递给它。

因此,c1.a=55;可以工作,但c1=null;只会使局部变量 c1 无效,而不是原始变量。


要获得所需的行为,请通过reference传递它

c1.F(ref c1);

你的方法应该是

void F(ref C c1)
{ 
    c1.a = 30;
    c1 = null;
}

不,您不是在"清空"对象,而是在清空对它的引用。当你赋c1 = null时,你只把对该对象的一个特定引用设置为 null,而另一个引用(在 Main 中)保持不变。

我已将参数重命名为"arrrgghhh"以显示正在发生的事情。您为它们指定了相同的名称,但这并不能使它们成为相同的变量。它们都指向同一个对象,但是如果你为空arrrgghhh,则不会为空c1。C1 仍将指向该对象,即使 arrrgghhh 不再指向该对象。

class C
{
    int a;
    int c=10;
    void F(C arrrgghhh)
    { 
        arrrgghhh.a = 30;
        arrrgghhh = null;
    }
    public static void Main(string[]args)
    {
        C c1 = new C();
        c1.a = 10;
        c1.F(c1);          
        Console.WriteLine(c1.a);
        Console.WriteLine(c1);
    }
}
相关文章: