关键字 'this' return 是引用还是值
Does the keyword 'this' return a reference or a value
每当在 C# class 中调用关键字 this
时,它 return 是对其出现的实例的引用,还是 return实例的值(如副本)?
例如,下面的代码会打印数字 23(意思是 this
return 复制了 foo
),还是数字 96(意思是 this
return引用了 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;
}
}
由于 this
涉及引用类型 (class
),因此它 returns 是对实例的引用。在以下代码片段中使用 this
与使用 foo2
没有什么不同:
var foo1 = new Foo();
var foo2 = foo1;
和foo2
一样只引用(!)foo1
引用的对象,在class里面,this
只引用实例。
如果不同,则不可能从方法内部为对象的 属性 赋值,因为使用 this
总是会导致复制对象,这反过来意味着您永远不会设置原始实例字段的值,这会比较差
所以,长话短说:this
持有一个引用,而不是值。
HTH
每当在 C# class 中调用关键字 this
时,它 return 是对其出现的实例的引用,还是 return实例的值(如副本)?
例如,下面的代码会打印数字 23(意思是 this
return 复制了 foo
),还是数字 96(意思是 this
return引用了 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;
}
}
由于 this
涉及引用类型 (class
),因此它 returns 是对实例的引用。在以下代码片段中使用 this
与使用 foo2
没有什么不同:
var foo1 = new Foo();
var foo2 = foo1;
和foo2
一样只引用(!)foo1
引用的对象,在class里面,this
只引用实例。
如果不同,则不可能从方法内部为对象的 属性 赋值,因为使用 this
总是会导致复制对象,这反过来意味着您永远不会设置原始实例字段的值,这会比较差
所以,长话短说:this
持有一个引用,而不是值。
HTH