如何覆盖抽象属性?

时间:2019-04-26 06:14:39

标签: c# oop abstract-class

datatype: "json",
loadonce: true,
forceClientSorting: true // force local sorting and filtering
search: true, // to apply the filter from postData.filters
postData: {
    // the filters property is the filter, which need be applied
    // to the data loaded from the server
    filters: JSON.stringify({
        groupOp: "OR",
        rules: [
            { field: "shared_by", op: "eq", data: " " },
            { field: "shared_by", op: "eq", data: login_user_id }
        ]
    })
},
...

如何覆盖抽象PropertyA?

enter image description here

2 个答案:

答案 0 :(得分:1)

您正在尝试使用字段覆盖属性

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

  

如果您想知道为什么new关键字在您的情况下不起作用,请阅读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;
        }
    }
}

答案 1 :(得分:0)

覆盖属性时,应同时写getset。在您的情况下,您将创建具有相同名称但具有另一个签名的新属性