我有一个像这样的基类:
public class BaseModalCommand
{
protected object m_commandArgument;
protected int m_commandID;
protected int m_enableUIFlags;
public virtual void OnIdle()
{
}
public virtual void OnResume()
{
}
public virtual void OnStart(int commandID, object argument)
{
}
public virtual void OnStop()
{
}
public virtual int EnableUIFlags
{
get
{
return this.m_enableUIFlags;
}
}
}
虚拟方法将在派生类型中被重写。如果我通过 FxCop 运行它,它会抱怨没有声明可见实例字段,并建议将其更改为私有并将其公开为受保护的属性。
有什么想法吗?我认为这条消息可以忽略。
对于任何类,客户端代码都有两种用途:引用您的类的代码和继承您的类的代码。人们普遍认为第二种使用方式是迄今为止耦合最紧密的。班级的变化直接影响他们的内部机制。像这样公开受保护的成员意味着基类中的更改将以不可预测的方式影响派生类的工作方式,而无需比较每个基类和派生类的代码。同样糟糕的是,派生类可以修改基类的内部结构。
如果您确实想像这样公开内部数据成员,请将私有数据成员包装在受保护的属性中(如 gisresearch 建议的那样)。这些属性(以及任何受保护的方法)构成了继承接口你们班的。与向外部客户端公开的任何接口一样(无论是通过定义公共方法和属性,还是通过显式接口实现),您需要管理此接口,特别是在较大的代码库中。界面可以改变,但改变应该是一个有意识的决定。
如果直接使用受保护的数据成员,则对基类和派生类之间的依赖关系的控制就会少得多。相信我:甚至无法确定更改可能产生的影响可能是一件非常不愉快的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)