当前位置: 首页 > 编程语言 > C#

公开受保护字段的最佳方式分享

时间:2023-04-10 17:32:11 C#

公开受保护字段的最佳方式我有一个这样的基类:受保护的intm_commandID;受保护的intm_enableUIFlags;publicvirtualvoidOnIdle(){}publicvirtualvoidOnResume(){}publicvirtualvoidOnStart(intcommandID,objectargument){}publicvirtualvoidOnStop(){}publicvirtualintEnableUIFlags{get{returnthis.m_enableUIFlags;virtual}}}方法将在派生类型中被覆盖。如果我通过FxCop运行它,它会抱怨没有声明可见的实例字段,并建议将其更改为私有并将其公开为受保护的属性。有任何想法吗?我认为可以忽略此消息。与任何类一样,客户端代码有两种用途:引用您的类的代码和继承您的类的代码。人们普遍认为,第二种用途是迄今为止最紧密耦合的。对类的更改直接影响其内部机制。像这样公开受保护的成员意味着基类中的更改将以不可预测的方式影响派生类的工作方式,而无需比较每个基类和派生类的代码。派生类可以修改基类的内部结构同样糟糕。如果您真的想公开此类内部数据成员,请将私有数据成员包装在受保护的属性中(如gisresearch建议的那样)。这些属性(以及任何受保护的方法)构成了类的继承接口。对于任何暴露给外部客户端的接口(无论是通过仅定义公共方法和属性,还是通过实现显式接口),该接口都是您需要管理的东西,尤其是在较大的代码库中。界面可以改变,但它应该作为一个有意识的决定来完成。如果您直接使用受保护的数据成员,您对基类和派生类之间的依赖关系的控制就会少得多。相信我:即使不确定变化可能产生的影响也会非常不愉快。FxCop的建议很合理。您不想直接将受保护的字段公开给派生类。由基类管理的状态应该由基类管理——永远不会被任何派生类直接修改。作为最佳实践,您的类字段应标记为私有并包装在getter/setter属性中,而不是受保护的对象m_commandArgument;使用私有对象m_commandArgument;受保护对象CommandArgument{get;set;}这有几个优点,但是简单的用法是在你的setter中做异常处理/验证。例如privatestring_email;protectedstringEmail{get{return_email;}set{if(value.IndexOf("@")>0)_email=value;否则抛出新的ArgumentException(“不是有效的电子邮件”);}}使用属性。将成员变量改为private,然后为每个成员变量设置protected属性。此致,FrankPaulAlexander是对的,FxCop也是。您希望将字段设为私有并通过属性公开它们以防止派生类更改变量本身。强制它们传递属性使基类有机会验证和/或拒绝任何修改。基本上,FxCop建议您执行privateobjectm_commandArgument;受保护对象CommandArgument{get{返回m_commandArgument;}set{m_commandArgument=value}}这是基于OO封装规则——(三个OO规则之一)。您可能希望在赋值之前检查该值,并且希望确保派生类不会直接操作它。以上就是C#学习教程:公开受保护字段的最佳方式分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: