6.6.2 合理使用类型的可见性和成员的可访问性
本节讲述如何正确设置类型的可见性和成员的可访问性来取得最优结果。
默认为密封类的优势
首先,定义新类型时,编译器应默认生成密封类,使他不能作为基类使用。
但是包括C#编译器在内的许多编译器都默认生成非密封类。
密封类之所以比非密封类好,有以下三个方面的原因
1.版本控制
2.性能
3.安全性和可预测性
定义类时遵循的原则
扫描二维码关注公众号,回复:
3483075 查看本文章
1.定义类时,除非确定要将其作为基类,并允许派生类对他进行转化,否则总是显式地指定为sealed。类默认为internal。
2.类的内部,将数据字段定义为private。
3.在类的内部,将自己的方法属性事件定义为private和非虚。当然也会将某个定义为public,一边公开类型的某些功能。
尽量避免上述任何成员定义为protected或internal,因为这使类型面临更大的安全风险。迫不得已,也会尽量选择protected或internal。
virtual永远最后才考虑,因为虚成员会放弃许多控制,丧失独立性,变得彻底依赖于派生类的正确行为。
4.OOP有一个古老的格言,大意是事情变得过于复杂时,就搞出更多的类型出来。
当算法的实现开始变复杂时,作者会定义一些辅助类型来封装独立的功能。
如果定义的辅助类型只有一个超类型使用,作者会在超类型中嵌套这些辅助类型。
这样除了可以限制范围,还允许嵌套的辅助类型中的代码引用超类型中定义的私有成员。
但是,VS的代码分析工具强制执行了一条设计规则,即对外公开的嵌套类型必须在文件或程序集范围中定义,不能在另一个类型中定义。
因为一些开发人员觉得引用嵌套类型时,所用的语法过于繁琐。作者赞同该规则,自己绝不会定义公共嵌套类型。