您的位置:威尼斯官方网站 > 威尼斯正规官网 > 打开之后看了一下

打开之后看了一下

发布时间:2019-11-21 16:23编辑:威尼斯正规官网浏览(179)

    目录

    • 主导条件
    • 类设计指南
    • 质量成员安插指南
    • 其余安顿指南
    • 可维护性指南
    • 取名指南
    • 品质指南
    • 框架指南
    • 文书档案指南
    • 布局指南
    • 有关链接

    C# 编制程序指南

    后天在 Github 上见到了壹位民代表大会腕创设叁个宾馆:CSharpCodingGuidelines,展开之后看了须臾间 readme.md 相关描述,感到应该很科学,于是就 clone 到地点拜读一下,这里列一些和睦的笔记,方便日后回首。

    主导尺度

    • Astonishment 原则:你的代码应该尽大概做到让每一位都能明白。任何人皆有写出让机器认知的代码,不过并不是各类人都能写出令人认知的代码;
    • Kiss 原则:相同 Python 之禅 里面说的那样,轻松胜于复杂;
    • YAGNI 原则:代码尽量能不负众望可增加,但请不要过分重构,因为你不能够预见今后;
    • D途锐Y 原则:不要再度造轮子,除非你一时光依然您造的车轮会比外人的完美;
    • 面向对象编制程序原则:世袭、封装、多态、抽象;

    类设计指南

    • 三个类/接口应该唯有二个用项,要符 合单一职务 原则;
    • 只成立重回有用对象的构造函数,当构造函数的参数超越 3 的话,你就应当思索你的类设计是或不是过分丰腴;
    • 接口应该小巧玲珑,其定义要刚强清晰地传达出其全数的行为;
    • 要是大器晚成种表现成多样兑现,请思忖动用接口而不是基类;
    • 用尽了全力选择接口将类进行相互解耦;
    • 制止使用静态类;
    • 绝不使用 new 关键字来制止编写翻译器展现相关警报;
    public class Book
    {
        public virtual void Print()
        {
            Console.WriteLine("Printing Book");
        }
    }
    
    public class PocketBook : Book
    {
        public new void Print()
        {
            Console.WriteLine("Printing PocketBook");
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            PocketBook pocketBook = new PocketBook();
            pocketBook.Print();
    
            ((Book)pocketBook).Print();
    
            Console.ReadKey();
        }
    }
    

    在上述代码段中,大家创设二个基类 book,并定义了三个 Print() 方法,接着大家创造三个子类 PocketBook,并通过 new 关键字来重写基类方法。在品种复杂的状态下,使用这种艺术将产生大家不能够确切预测是子类调用照旧父类调用,使代码复杂度进步。

    • 相应能够将派生类当做基类对象来管理;
    • 绝不征引基类的派生类;
    • 防止揭露二个目的注重的任何对象;
    • 制止双向注重;
    • 类应该有事态和表现;
    • 类应该保险其内部景色的生机勃勃致性;

    个性成员布置指南

    • 允许按专擅顺序设置属性;
    • 动用办法并不是性质;
    • 并不是选用相互排挤的天性;
    • 属性、方法依旧地点方法只应该做风流罗曼蒂克件事情;
    • 毫不通过静态成员公开有事态的靶子;
    • 用 IEnumerable 或许 ICollection 来替代具体的会集对象作为重临值;
    • 假诺属性、参数和再次回到值是字符串大概聚众类型的话,则永恒不应有为空;
    • 尽量地定义具体的参数;
    • 假造动用特定域的值类型并不是基元;

    其他安插指南

    • 抛出极度实际不是回去某种类型的景况值;
    • 提供整机而有意义的不行音信;
    • 抛出相当的最实际的特别;
    • 无须通过 try - catch 形式隐蔽相当;
    • 正确管理异步代码中的至极;
    • 调用事件委托前先判定是或不是为空;
    event EventHandler<string> Notify;
    protected virtual void OnNotify(string args)
    {
        Notify?.Invoke(this, args);
    }
    
    • 运用受保证的虚方法来触发各样事件;
    • 设想增添属性别变化化事件;
    • 当接触事件时要保管 sender != nulll;
    • 要是适龄的话,请思考接受泛型约束;
    class SomeClass
    {
    }
    
    /// <summary>
    /// 不推荐
    /// </summary>
    class MyClass1
    {
        void SomeMethod<T>(T t)
        {
            object temp = t;
            SomeClass obj = (SomeClass)temp;
        }
    }
    
    /// <summary>
    /// 推荐
    /// </summary>
    class MyClass2
    {
        void SomeMethod<T>(T t) where T :SomeClass
        {
            SomeClass obj = t;
        }
    }
    
    • 在回来 LINQ 表达式从前计算它的结果;
    • 尽管不是必须,不要使用 thisbase 关键字;

    可维护性指南

    • 方法内部的代码段尽量不要超越 7 行;
    • 管教所有成员个人,类的类型默以为为 internal sealed
    • 幸免重复标准;
    • 在其包蕴的命名空间内命名程序集;
    • 将源文件命名称叫它所蕴含的花色;
    • 将源文件的从头到尾的经过节制为生龙活虎种档期的顺序;
    • 将不一样的逻辑函数放到同二个片段类中;
    • 在使用三个连串时,使用 using 关键字导入要求的命名空间,并不是项目标完全空间标志;
    • 毫无接纳法力数;
    • 独有当类型简单的讲时才使用 var 关键字;
    • 概念变量时尽可能地最早化;
    • 在互相独立的代码段中定义不经常变量;
    • 若对象有汇聚要求带头化的话在进展对象起首化的同一时候张开联谊开首化;
    • 不用显式实行 bool 值的可比;
    • 幸免嵌套循环;
    • 在使用 ifelsedowhileforforeachcase 的还要采用 {}
    • switch case 代码段中增加 default 逻辑;
    • 在有着的 ifelse if 后再加多 else;
    • 制止使用多少个再次来到值;
    • 酌量选取简易的法则语句替代 if else
    • 封装属性、方法或一些函数中的复杂说明式;
    • 再稳妥的状态下品尝重载方法;
    • 使用可选参数来替代重载;
    • 幸免使用命名参数;
    • 防止定义超越3个参数的签字;
    • 制止函数签字称叫布尔类型;
    • 不用将参数作为不常变量使用;
    • 将格局作为操作;
    • 不要批注代码;

    命名指南

    • 毫无在变量、参数和花色成员中富含数字;
    • 不用在字段增加前缀;
    • 毫无接收缩写;
    • 成员、参数和变量定义要依照它们代表的意思;
    • 接收名词、名词短语可能形容词来定义类型;
    • 选择描述性名称命名泛型参数;
    • 在类成员中不用再一次定义和类相通的称谓;
    • 分子定义可参照 .Net Framework 的定义格局;
    • 制止选用只怕被误解的段名称或字段;
    • 准确定义属性;
    • 在命名格局或一些函数时选取谓词或谓词对象;
    • 采取名称、层、谓词和功用申明命名空间;
    • 运用动词或动词前缀来定义事件;
    • 使用 ingend 后缀来注明事件预管理和发送事件;
    • 使用 on 前缀来定义事件管理程序;
    • 使用 Async 或者 TaskAsync 来标记异步方法;

    品质指南

    • 使用 Any() 判断 IEnumerable 是或不是为空 ;
    • 仅对低密集型活动采用异步;
    • 对于 CPU密集型使用 Task.Run
    • 制止同有时间将 async/awaitTask.Wait 混合使用;
    • 避免 async/await 在单线程情状下现身死锁;

    框架指南

    • 使用 C# 类型 小名实际不是系量进行显式调用;
    • 决不硬编码;统命名空间中的类型;
    • 行使最高警戒等第编写翻译代码;
    • 对此简易的表明式幸免采用 LINQ
    • 行使 lambda 表明式来代表无名函数;
    • 只用在利用动态目的时才使用 dynamic 关键字;
    • 帮衬异步/等待任务再而三;

    文档指南

    • 运用英式罗马尼亚语来编排相关文书档案;
    • 文书档案中的代码部分要有限援救完整性;
    • 与任何开拓人士一同编写 xml 文书档案;
    • 编写制定 MSDN 风格的技艺文书档案;
    • 幸免内联注释;
    • 注释值应该用来分解复杂的算法或商量;
    • 毫不接纳注释来追踪要在随后产生的干活;

    布局指南

    • 行使正规布局;
    • 依附公式供给开展命名空间的封锁;
    • 将成员置于定义优质的各个中;
    • 严苛使用 #region
    • 适度接收表现周详的分子;

    有关链接

    • Code Complete: A Praccal Handbook of Soware Construcon (Steve McConnel)
    • The Art of Agile Development (James Shore)
    • Applying Domain-Driven Design and Paerns: With Examples in C# and .NET (Jimmy Nilsson)
    • Jeremy D. Miller's Blog
    • LINQ Framework Design Guidelines
    • Best Pracces for c# async/await

    本文由威尼斯官方网站发布于威尼斯正规官网,转载请注明出处:打开之后看了一下

    关键词:

上一篇:没有了

下一篇:没有了