提问人:GHC 提问时间:9/9/2018 更新时间:9/9/2018 访问量:58
关键字“this”是否返回引用或值
Does the keyword 'this' return a reference or a value
问:
每当在 C# 类中调用关键字时,它是返回对它所在的实例的引用,还是返回实例的值(如副本)?this
例如,以下代码是打印数字 23(表示返回的副本)还是数字 96(表示返回引用)?this
foo
this
foo
class Program
{
static void Main()
{
Foo foo = new Foo { 23 };
foo.Bar();
Console.Write(foo.FooBar);
}
}
class Foo
{
public int FooBar { get; set; }
public void Bar()
{
Foo newFoo = this;
newFoo.FooBar = 96;
}
}
答:
3赞
Golo Roden
9/9/2018
#1
由于与引用类型 () 相关,因此它返回对实例的引用。在以下代码片段中,“使用”与“使用”没有什么不同:this
class
this
foo2
var foo1 = new Foo();
var foo2 = foo1;
与仅引用 (!) 一样,类内部引用的对象也仅引用实例。foo2
foo1
this
如果它不同,则不可能从方法内部为对象的属性赋值,因为使用总是会导致复制对象,这反过来意味着您永远不会设置原始实例字段的值,这将是相当糟糕的。this
所以,长话短说:持有参考,而不是价值。this
HTH 😊
评论
0赞
GHC
9/9/2018
我可以使用以下方法获取副本而不是参考吗?this.MemberwiseClone()
0赞
Adam G
9/9/2018
你会得到一个“浅拷贝”。在这个人为的例子中,这就足够了,但是如果原始 Foo 引用了另一个对象而不是简单的值类型,那么你的 foo 克隆虽然本身是一个唯一的对象,但将引用相同的子对象实例。
评论