关键字“this”是否返回引用或值

Does the keyword 'this' return a reference or a value

提问人:GHC 提问时间:9/9/2018 更新时间:9/9/2018 访问量:58

问:

每当在 C# 类中调用关键字时,它是返回对它所在的实例的引用,还是返回实例的值(如副本)?this

例如,以下代码是打印数字 23(表示返回的副本)还是数字 96(表示返回引用)?thisfoothisfoo

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;
    }
}
C# 哎呀 ,这个 按引用传递 的传递值

评论

2赞 Chetan 9/9/2018
运行此代码时发生了什么情况?

答:

3赞 Golo Roden 9/9/2018 #1

由于与引用类型 () 相关,因此它返回对实例的引用。在以下代码片段中,“使用”与“使用”没有什么不同:thisclassthisfoo2

var foo1 = new Foo();
var foo2 = foo1;

与仅引用 (!) 一样,类内部引用的对象也仅引用实例。foo2foo1this

如果它不同,则不可能从方法内部为对象的属性赋值,因为使用总是会导致复制对象,这反过来意味着您永远不会设置原始实例字段的值,这将是相当糟糕的。this

所以,长话短说:持有参考,而不是价值。this

HTH 😊

评论

0赞 GHC 9/9/2018
我可以使用以下方法获取副本而不是参考吗?this.MemberwiseClone()
0赞 Adam G 9/9/2018
你会得到一个“浅拷贝”。在这个人为的例子中,这就足够了,但是如果原始 Foo 引用了另一个对象而不是简单的值类型,那么你的 foo 克隆虽然本身是一个唯一的对象,但将引用相同的子对象实例。