Pri*_*est 8 .net c# reference-type
为什么这会产生"0"?
object a = 0;
object b = a;
a = null;
Console.WriteLine(b.ToString()); // Produces "0"
Console.Read();
Run Code Online (Sandbox Code Playgroud)
不是b指向同一个位置并且设置a = null有效地使b null?
Eri*_*ert 20
您想知道cookie的位置.你有一张纸,标有"A".在纸上写着铅笔"123芝麻街".
这篇论文不是一个cookie.地址不是cookie.本文包含对包含cookie的地址的引用.
你得到第二张纸,标有"B".在那张纸上,你复制了"A"的内容.现在你有两张纸,都说"123芝麻街".两者都告诉你饼干在哪里.
你拿一张纸"A"并擦掉它."A"不再指代cookie的位置.B仍然如此.
您假设"b = a"表示在B上写"饼干的位置,请参阅纸张A".但这不是C#中"b = a"的意思; 它意味着制作参考的副本,而不是作为参考的别名.
在C#中创建引用的别名,您使用"ref"关键字,令人困惑:
void M(ref object b)
{
b = null;
}
...
object a = 0;
M(ref a);
// "b" now becomes an alias for "a"; when "b" is nulled out, so is "a" because they are the same variable with two different names.
Run Code Online (Sandbox Code Playgroud)
在C#中,只能在调用带有这样的ref参数的方法时执行此操作.C#不支持您想要的功能,但我们考虑过支持它:
object a = 0;
ref object b = ref a;
a = null; // b and a are aliases for the same variable now.
Run Code Online (Sandbox Code Playgroud)
您是否迫切需要此功能?如果你这样做,请告诉我它是什么.这将有助于我们优先考虑该功能是否值得在假设的未来版本的C#中进行.
更新:它完成了!此功能已添加到C#7中.
您将引用设置为null,您不会更改引用指向的对象.
a和b是两个不同的引用,因此设置a到null课程将离开b不变(想想"指针"),它只是意味着一个现在指向null("无处").