zoukankan      html  css  js  c++  java
  • .NET设计规范四:简单的扩展设计与个人思考

      有一个星期没有写文章记录学习与工作之路了,今天趁着是五四青年节下午休息的时光写了.NET设计规范的最后一篇了!

      在做好一系列的命名规范,设计规范之后,更高层的规范就是那些扩展性的规范了(或者说是面向对象,其实这方面我是菜菜鸟),这里我只简单的说说!

      说实话写这样的文章真不好写,尤其是涉及到架构方面的设计我更是无从下手,所以我就把书本上的总结一下,尽量少一点个人想法!

      接着上三篇:.NET设计规范一:设计规范基础  ②.NET设计规范二:类型成员设计  ③.NET设计规范三:类型和类型成员设计的约定和惯用法

      5.扩展性设计

        5.1密封类

          ①不推荐使用密封类,除非有特殊的理由

        5.2抽象类和抽象接口

          ①必要的时候应该定义一个抽象类(或者是一个基类)和一个接口,然后用抽象类(或基类)实现这个接口      

          

        5.3基类

      6.异常的设计

        6.1自定义异常的设计

          ①避免太深的继承层次

          ②必须要从“System.Exception”派生出新的异常类,这是个规范

          ③要在异常类名称后面加上“Exception”后缀

          ④要是的异常可以序列化,这是为了能够跨应用程序和跨平台

          ⑤要为异常提供常用的构造函数

          

          ⑥要定义“ToString”方法返回异常信息

          ⑦书中的两点建议,不怎么明白

          

     1     [Serializable]
     2     public class MyException:Exception  //这是最简单的异常处理信息
     3     {
     4         private string _message;
     5 
     6         public MyException()
     7         {}
     8         public MyException(string message)
     9         {
    10             _message = message;
    11         }
    12 
    13         public override string ToString()
    14         {
    15             // TO DO.
    16             return "";
    17         }
    18     }

          PS:书中对异常的介绍写了很多,可是理解的很少,这里就把自己的理解写了下来,所以还需要在看几遍,这样才能慢慢的理解他!  

      7.数组,特性,集合的编码规范

        7.1数组

          ①优先使用集合而不是数组

          ②不要把数组设计为只读数组,应该使得用户可以修改数组中的元素

        7.2Attribute(特性)

          ①命名时要添加“Attribute”后缀,并且继承“Attribute”基类

            public class MyAttribute:Attribute

          ②要在自定义的时候使用“AttributeUsageAttribute”这个特性 

    1     [AttributeUsage(AttributeTargets.All)]
    2     public class MyAttribute : Attribute
    3     {
    4 
    5     }

          ③要为可选参数提供可设置的属性 

          

          ④要为必填参数提供只读属性

          ⑤要提供构造函数对必填参数进行初始化,每个参数名应该与相应的属性名一样(可能大小写会不一样)

     1     [AttributeUsage(AttributeTargets.All)]
     2     public class MyAttribute : Attribute
     3     {
     4         public MyAttribute(string name, string message)
     5         {
     6             Name = name;
     7             Message = message;
     8         }
     9 
    10         private string Name { get; set; }    //这是必填参数
    11         private string Message { get; set; }  //这是必填参数
    12         public string Author { get; set; }   //这是可选参数
    13     }
    14 
    15     [My("ss", "ss", Author = "sss")]  //那么我在调用时就会出现如下调用方式
    16     public class One
    17     { }

          ⑤尽可能把自定义的Attribute密封起来,这样会是的查找“Attribute”更快

          ⑥避免提供构造函数对可选参数进行初始化

          ⑦避免对自定义的“Attribute”构造函数进行重载

        7.3关于集合属性和返回值

          ①不要提供可设置的集合属性 

    1         public Collection<String> Items { get; set; }  //坏的设计
    2         public Collection<string> Items          //提倡的设计
    3         {
    4             get
    5             {
    6                 // TO DO  
    7             } 
    8         }

          ②要用“Collection<T>”或其子类作为属性或返回值来表示可读写的集合(就像上面一样)

          ③使用“ReadOnlyCollection<T>”作为属性或返回值来表示只读集合

      这篇文章写的不好,可能真的是由于本人知识积累的有限,写的很艰难,不过最终还是写好了,继续加油把!

  • 相关阅读:
    sudo: 在加载插件“sudoers_policy”时在 /etc/sudo.conf 第 0 行出错 sudo: /usr/lib/sudo/sudoers.so 必须只对其所有者可写 sudo:
    ubuntu多版本Python和pip切换
    Ubuntu16.04下安装python3.6.4详细步骤
    oenstack firewalld ufw
    linux相关安全设置
    TransPose: Towards Explainable Human Pose Estimation by Transformer
    TransTrack: Multiple-Object Tracking with Transformer
    Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers
    Adversarial Sparse Transformer for Time Series Forecasting
    Learning to Detect Objects with a 1 Megapixel Event Camera
  • 原文地址:https://www.cnblogs.com/yangcaogui/p/2469608.html
Copyright © 2011-2022 走看看