zoukankan      html  css  js  c++  java
  • 定义类时建议遵循的指导方针

    • 定义类时,通常显式地将类标记为sealed,除非确信计划将该类定义为允许派生类进行特殊化的基类。如前所述,这与目前c#及其他编译器的默认方式相反。除非希望类在程序集外公开开发对外提供,否则将类默认地标记为internal。值得庆幸地是,在没有显示表明类型的可见性时,c#编译器的默认方式就是internal。如果确实认为其他类可以从这个类派生很重要,而且也不希望进行特殊化,那么,可以使用前面提到的虚方法的密封技术来创建一个密闭的类,然后继承基类。
    • 在类的内部,毫不犹豫地将字段定义为private。值得庆幸的是,c#默认方式就是将字段标记为private。如果c#将所有的字段都定义为private,而不能将字段标记为protected,internal或者public等,这将非常受欢迎。暴露状态极容易产生问题,它将对象的行为无法预测,而且还公开潜在的安全漏洞。即使只将一些字段定义为internal,这些问题也会确实存在。即使在一个单独的程序集中,跟踪引用某个字段的所有代码都非常困难,尤其是若干个开发人员一起编写代码然后编译在同一个程序集时。
    • 在类的内部,始终将自己的方法、属性和事件定义为private和非虚拟的。值得庆幸的是c#的默认方式也是这样的。当然,将方法、属性和事件定义为public可以把类型的某些类型中的功能对外提供。尽量避免将成员定义为protected或者internal,这将使类型中存在潜在的脆弱性。但是,与其将成员标记为virtual还不如将成员标记为protected或者internal,因为虚成员放弃了许多控制,而其确实依赖于派生类的正常行为。面向对象编程中有一个古老的格言,即当事情变得异常复杂时,就生成更多的类型。当某些算法的实现开始变得复杂时,可以定义一些辅助类型来密封离散的函数块。如果定义这些辅助类型值由uber类型(uber-type)使用,则可以再uber类型中嵌套地定义这些辅助类型,该方式允许进行范围管理(scoping),同样也允许嵌套的类型中的代码引用定义uber类型中的私有成员。但是,FxCop强制实施了一个设计指导规则,即公开对外提供的嵌套类型应定义在文件或者程序集范围内,而不应该定义在另一个类型中。该规则是偶写开发人员发现引用嵌套类型的语法麻烦后制定的。该规则令人欣赏,因此永远不会定义公开的嵌套类型。
  • 相关阅读:
    【洛谷P3804】【模板】后缀自动机 (SAM)
    【洛谷P3321】序列统计
    【洛谷P4929】【模板】舞蹈链(DLX)
    【洛谷P3703】树点涂色
    Kubernets二进制安装(5)之私有仓库harbor搭建
    忘记Mysql的root用户密码处理方法(以mysql 5.5.33为例)
    编译安装MySQL 5.5.33
    Kubernets二进制安装(4)之Docker安装
    Kubernets二进制安装(3)之准备签发证书环境
    Kubernets二进制安装(2)之Bind9安装
  • 原文地址:https://www.cnblogs.com/qishichang/p/1472330.html
Copyright © 2011-2022 走看看