只读属性继承:抽象或集保护

时间:2011-09-13 13:06:56

标签: oop inheritance properties

假设A类是抽象的,并且定义了从B继承的类B必须提供的只读属性。将这些属性定义为抽象或受集合保护是更好的做法:

public abstract class A
{
    public abstract int Value { get; }
}
public class B : A
{
    public override int Value { get { return 1; } }
}

OR

public abstract class A
{
    public int Value { get; protected set; }
}
public class B : A
{
    public B()
    {
        Value = 1;
    }
}

我认为第一种解决方案可能更好,但我想听听其他意见。

1 个答案:

答案 0 :(得分:0)

这取决于您的只读方式。如果你的意思是只读呼叫者,那么我更喜欢第二种解决方案。

第一个解决方案强制子类实现get,这很好。但是它禁止孩子实施set(甚至是受保护的孩子),这是不好的。

使用第二个解决方案,整个Value接口由基类定义,这很好,子类仍然可以在选择时设置Value,这也很好。

另一方面,如果“只读”是指真正的只读,因为即使子类不允许设置Value,那么第一种解决方案更好。如果你试图设置它,你甚至会得到正确的编译错误。