如果我有一个非常简单的课程,例如:

public class Example
{
    public int Number { get; set; }
    public Example(int numberArg)
    {
        this.Number = numberArg;
    }
}


我有一个像这样的派生类:

public class AnotherExample : Example
{
    public int DoubleNumber
    {
        get
        {
            return this.Number * 2;
        }
    }
    public AnotherExample(int numberArg) : base(numberArg) {}
}


如果我使用this.Number引用AnotherExample对象基础Number属性与使用base.Number引用该属性有什么区别?

谢谢!

最佳答案

如果未覆盖Number,则没有区别,因为this.Number将在继承链中正确解析。

这也意味着在基类中调用this.Member(如果在派生类中被覆盖)将再次使用继承链并找到派生的实现。


如果已被覆盖,则使用base将始终转到该属性的基类版本,而this.Number首先将转到您的覆盖版本。

如果您打算在构造函数中调用virtual成员,请注意有关它的一般建议:

Virtual member call in a constructor

这个答案省略了关于成员隐藏的解释,因为OP示例比这更简单。

关于c# - 引用继承的属性/变量时,使用this.X和base.X的行为有何不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21602021/

10-16 15:09