在清空我的对象后,我在变量 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
在你的例子中不是一个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);
}
}