正确使用 C# 'new' 修饰符来公开受保护的属性

Maj*_*Inc 5 c# inheritance

假设我有一个抽象基类

public abstract class BaseClass
{
    private MyObject myObject;

    protected MyObject PropA
    {
        get
        {
            if(myObject == null) this.myObject = new MyObject();
            return this.myObject;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

...在我的派生类之一中,我想将受保护的基类属性设为PropA public。在这种情况下使用new修饰符是否正确?

public class DerivedClass : BaseClass
{
    public new MyObject PropA
    {
        get
        {
            return base.PropA;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

The*_*Man 0

这是正确的。每当您的类中的成员与继承类中的成员同名时,您都需要使用 new 关键字(即使这两个属性/方法具有不同的返回类型)。