Возвращает ли ключевое слово this ссылку или значение - PullRequest
0 голосов
/ 09 сентября 2018

Когда ключевое слово this вызывается внутри класса C #, возвращает ли оно ссылку на экземпляр, в котором оно появляется, или возвращает значение экземпляра (например, копию)?

Например, будет ли следующий код печатать число 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 Ответ

0 голосов
/ 09 сентября 2018

Поскольку this относится к ссылочному типу (class), он возвращает ссылку на экземпляр. Использование this ничем не отличается от использования foo2 в следующем фрагменте кода:

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

Так же, как foo2 только ссылается (!) На объект, на который ссылается foo1, внутри класса, this только ссылается на экземпляр.

Если бы это было иначе, было бы невозможно, например, присваивать значение свойству объекта изнутри метода, так как использование this всегда приводит к скопированному объекту, что, в свою очередь, означает, что вы никогда не установите значение поля исходного экземпляра, что будет довольно плохо.

Итак, вкратце: this содержит ссылку, а не значение.

HTH ?

...