是"这"总是知道调用对象?

时间:2018-06-06 16:11:05

标签: c# inheritance polymorphism this

我想避免在所有派生类中编写相同的代码行。我有以下结构:

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 :(得分:1)

一些语言功能/行为很容易尝试...考虑以下代码:

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。在您的情况下,thisBaseClass只是BaseClass对已创建实例的引用。不要将指向对象的引用类型与对象本身的类型混淆,它们不必相同。