Всегда ли «это» знает вызывающий объект? - PullRequest
0 голосов
/ 06 июня 2018

Я бы не хотел писать одну и ту же строку кода во всех моих производных классах.У меня есть следующая структура:

using Newtonsoft.Json;

public class BaseClass
{
    public string BaseProperty { get; set; }
    public string Serialize() { return JsonConvert.SerializeObject(this); }
}

public class DerivedClass : BaseClass
{
    public string DerivedProperty { get; set; }
}

Что происходит, когда Serialize() вызывается из DerivedClass?Является ли this достаточно умным, чтобы знать, что дочерний объект содержит дополнительное свойство?Или я ограничен написанием этой же строки кода для каждого дочернего элемента BaseClass?

1 Ответ

0 голосов
/ 06 июня 2018

С некоторыми особенностями / поведением языка легко экспериментировать ... Учитывая следующий код:

public class A
{
    public string WhoAmI => this.ToString();
}

public class B:A { }

Ваш вопрос эквивалентен вопросу о том, что Console.WriteLine(new B().WhoAmI) выводит на печать?

Хорошо, если сомневаетесь, запустите его и посмотрите ... это занимает менее 1 минуты.

this является ссылкой на объект и ведет себя как любая другая ссылка, у него просто есть специальное имя.

Примите во внимание следующее:

A a = new B();

Теперь у вас есть B экземпляр, на который ссылается A напечатанная ссылка a, но экземпляр по-прежнему B.В вашем случае this внутри BaseClass - это просто BaseClass ссылка на любой экземпляр, который был создан.Не путайте тип ссылки, указывающей на объект, с типом самого объекта, они не обязательно должны быть одинаковыми.

...