如何覆盖摘要属性?

How to Override abstract Property?

public abstract class SampleA
{
    public abstract string PropertyA {get;set;}
}

如何覆盖抽象 PropertyA?

当您覆盖 属性 时,您应该同时编写 getset。在您的情况下,您创建了 a new 属性 具有相同的名称但具有另一个签名。

您正试图用字段

覆盖属性

属性通过 getset 值访问器提供对字段的访问。请阅读 this 以更好地理解差异。因此,由于它们不相同,您的 IDE 建议您使用 new-关键字隐藏父级 属性。

If you want to know why the new Keyword didn't work in your case, read this.

改进您的设计

在你的问题中,你的代码中的 PropertyA 似乎需要设置为继承 类,但不能从外部更改。所以也许可以这样做:

public abstract class SampleA
{
    // no setter -> cant be changed after initialization
    public abstract string PropertyA { get; } 

    // protected setter -> can only be changed from inside SampleA or Sample
    public abstract string PropertyB { get; protected set; } 
}

public class Sample : SampleA
{
    public override string PropertyA { get; } = "override";
    public override string PropertyB { get; protected set; } = "override";
}

您当前的设计是如何完成的

这样做:

public class Sample : SampleA
{
    public override string PropertyA { get; set; } = "override";
}

甚至用更多的行为来实现它:

public class Sample : SampleA
{
    private string _propertyA = "override";

    public override string PropertyA
    {
        get { return _propertyA; }
        set
        {
            // Maybe do some checks here
            _propertyA = value;
        }
    }
}