【发布时间】:2012-10-13 07:34:40
【问题描述】:
我有一个抽象类,我想在其受保护的构造函数中初始化一个只读字段。我希望这个只读字段在派生类中可用。
按照我将所有字段设为私有并公开属性的习惯,我将其实现如下:
abstract class Foo
{
private readonly int _field;
protected Foo(int field)
{
_field = field;
}
protected int Field
{
get { return _field; }
}
}
但后来我想知道在这里保持字段私有是否真的有很多好处。我知道属性的优势,一般来说有几个关于这个问题的 SO 问题,但它们侧重于公共领域,而不是受保护的领域。
那么我是否应该切换到下面的实现?在这两种情况下需要注意哪些注意事项和优点/缺点?
abstract class Foo
{
protected readonly int _field;
protected Foo(int field)
{
_field = field;
}
}
【问题讨论】:
-
考虑到这一点,
public和protected之间并没有真正的区别。两者都是在声明程序集之外可见的。所以几乎所有关于public readonly X Y与public X Y{get;}的论点都适用。