关键字“this”是不是返回引用或值
Posted
技术标签:
【中文标题】关键字“this”是不是返回引用或值【英文标题】:Does the keyword 'this' return a reference or a value关键字“this”是否返回引用或值 【发布时间】:2019-02-13 22:48:59 【问题描述】:每当在 C# 类中调用关键字 this
时,它是返回对它出现的实例的引用,还是返回实例的值(如副本)?
例如,以下代码会打印数字 23(意思是 this
返回 foo
的副本)还是数字 96(意思是 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;
【问题讨论】:
运行这段代码时发生了什么? 【参考方案1】:由于this
与引用类型(class
)相关,它返回对实例的引用。使用this
和在下面的代码sn-p中使用foo2
没什么区别:
var foo1 = new Foo();
var foo2 = foo1;
与foo2
一样,只引用(!)foo1
引用的对象,在类内部,this
只引用实例。
如果它不同,就不可能例如从方法内部为对象的属性赋值,因为使用this
总是会导致复制对象,这反过来意味着您永远不会设置原始实例字段的值,这将是相当糟糕的。
所以,长话短说:this
持有参考,而不是价值。
HTH?
【讨论】:
我可以使用this.MemberwiseClone()
获得一份副本而不是参考资料吗?
你会得到一个“浅拷贝”。在这个人为的示例中,这已经足够了,但是如果原始 Foo 引用了另一个对象而不是简单的值类型,那么您的 foo 克隆虽然本身是一个唯一对象,但将引用相同的子对象实例。以上是关于关键字“this”是不是返回引用或值的主要内容,如果未能解决你的问题,请参考以下文章