【问题标题】:Does "this" always know the calling object?“this”总是知道调用对象吗?
【发布时间】:2018-06-06 16:11:04
【问题描述】:

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

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; }
}

当从DerivedClass 调用Serialize() 时会发生什么? this 是否足够聪明,可以知道子对象包含一个额外的属性?或者,我是否仅限于在 BaseClass 的每个孩子中编写同一行代码?

【问题讨论】:

  • 是的。 this 知道这一点非常聪明。
  • 同时检查this SO question
  • 谢谢@CodeNotFound。我想我误解了这里描述的一些用法。

标签: c# inheritance polymorphism this


【解决方案1】:

一些语言特性/行为很容易试验......考虑以下代码:

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

public class B:A { }

您的问题相当于问Console.WriteLine(new B().WhoAmI) 打印出什么?

好吧,如果有疑问,请运行它并查看...它只需不到 1 分钟。

this 是对对象的引用,其行为与任何其他引用一样,只是有一个特殊的名称。

考虑以下几点:

A a = new B();

现在您有一个A 类型引用a 引用的B 实例,但该实例仍然是B。在您的情况下,BaseClass 内的 this 只是对已创建的任何实例的 BaseClass 引用。不要将指向对象的引用类型与对象本身的类型混淆,它们不必相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多