假设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;
}
}
我认为第一种解决方案可能更好,但我想听听其他意见。
答案 0 :(得分:0)
这取决于您的只读方式。如果你的意思是只读呼叫者,那么我更喜欢第二种解决方案。
第一个解决方案强制子类实现get
,这很好。但是它禁止孩子实施set
(甚至是受保护的孩子),这是不好的。
使用第二个解决方案,整个Value接口由基类定义,这很好,子类仍然可以在选择时设置Value,这也很好。
另一方面,如果“只读”是指真正的只读,因为即使子类不允许设置Value,那么第一种解决方案更好。如果你试图设置它,你甚至会得到正确的编译错误。