我有这样一个基类:
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运行它,它会抱怨没有声明可见的实例字段,并建议将其更改为private并将其作为受保护的属性公开.
有什么想法吗?我认为这个消息可以被忽略.
解决方法
对于任何类,客户端代码有两种用法:引用您的类的代码和继承您的类的代码.人们普遍认为,第二种用途是迄今为止最紧密耦合的.你班级的变化直接影响他们的内部机制.像这样暴露受保护的成员意味着基类的更改将影响派生类如何以不可预测的方式工作,而不会比较每个基类和派生类的代码.同样糟糕的是,派生类可以修改基类的内部.
如果您确实希望公开这样的内部数据成员,请将私有数据成员包装在受保护的属性中(如gisresearch建议的那样).这些属性(以及任何受保护的方法)构成了类的继承接口.与暴露给外部客户端的任何接口(无论是通过仅定义公共方法和属性,还是通过显式接口实现)一样,此接口是您需要管理的,特别是在较大的代码库中.界面可以更改,但应作为有意识的决定进行更改.
如果直接使用受保护的数据成员,则对基类和派生类之间的依赖关系的控制要少得多.相信我:甚至无法确定改变可能产生的影响可能是非常不愉快的事情.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。