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);
}
}
问问题
51 次
3 回答
1
c1
在您的情况下,它不是一个alias
新的局部变量,而是按值传递引用的新局部变量。
所以,c1.a=55;
会起作用,但c1=null;
只会使局部变量 c1 无效,而不是您的原始变量..
要获得所需的行为,请通过reference
c1.F(ref c1);
你的方法应该是
void F(ref C c1)
{
c1.a = 30;
c1 = null;
}
于 2013-10-24T08:52:13.390 回答
0
不,您不是在“清空”一个对象,而是在清空对它的引用。当您分配时c1 = null
,您只需将对该对象的一个特定引用设置为 null,而保持另一个引用 (in Main
) 不变。
于 2013-10-24T08:52:04.503 回答
0
我已将参数重命名为“arrrgghhh”以显示正在发生的事情。您给它们两个相同的名称,但这并不会使它们成为相同的变量。它们都指向同一个对象,但如果你为空 arrrgghhh 它不会为空 c1。即使 arrrgghhh 不再存在, c1 仍将指向该对象。
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);
}
}
于 2013-10-24T08:57:30.897 回答