韩国建筑网站,网站建设公司常州,中国建筑网官网查证,如何免费自己做网站C# 编程指南前不久在 Github 上看见了一位大牛创建一个仓库#xff1a;CSharpCodingGuidelines#xff0c;打开之后看了一下 readme.md 相关描述#xff0c;感觉应该很不错#xff0c;于是就 clone 到本地拜读一下#xff0c;这里列一些自己的笔记#xff0c;方便日后回顾… C# 编程指南前不久在 Github 上看见了一位大牛创建一个仓库CSharpCodingGuidelines打开之后看了一下 readme.md 相关描述感觉应该很不错于是就 clone 到本地拜读一下这里列一些自己的笔记方便日后回顾。基本原则Astonishment 原则你的代码应该尽量做到让每一个人都能理解。任何人都有写出让机器认识的代码但是并不是每个人都能写出让人认识的代码Kiss 原则类似 Python 之禅 里面说的那样简单胜于复杂YAGNI 原则代码尽量能做到可扩展但请不要过度重构因为你不能预知未来DRY 原则不要重复造轮子除非你有时间或者你造的轮子会比别人的优秀面向对象编程原则继承、封装、多态、抽象类设计指南一个类/接口应该只有一个用途要符 合单一职责 原则只创建返回有用对象的构造函数当构造函数的参数超过 3 的话你就应该考虑你的类设计是否过于臃肿接口应该短小精悍其定义要明确清晰地传达出其具有的行为如果一种行为有多种实现请考虑使用接口而不是基类尽量使用接口将类进行彼此解耦避免使用静态类不要使用 new 关键字来禁止编译器显示相关警告在上述代码段中我们创建一个基类 book并定义了一个 Print() 方法接着我们创建一个子类 PocketBook并通过 new 关键字来重写基类方法。在项目复杂的情况下使用这种方式将导致我们不能准确预测是子类调用还是父类调用使代码复杂度提升。应该可以将派生类当作基类对象来处理不要引用基类的派生类避免暴露一个对象依赖的其它对象避免双向依赖类应该有状态和行为类应该保护其内部状态的一致性属性成员设计指南允许按任意顺序设置属性使用方法而不是属性不要使用相互排斥的属性属性、方法或者本地方法只应该做一件事情不要通过静态成员公开有状态的对象用 IEnumerable 或者 ICollection 来代替具体的集合对象作为返回值如果属性、参数和返回值是字符串或者集合类型的话则永远不应该为空尽可能地定义具体的参数考虑使用特定域的值类型而不是基元其他设计指南抛出异常而不是返回某种类型的状态值提供完整而有意义的异常信息抛出适当的最具体的异常不要通过 try - catch 方式隐藏异常正确处理异步代码中的异常调用事件委托前先判断是否为空event EventHandlerstring Notify;protected virtual void OnNotify(string args){Notify?.Invoke(this, args);
}使用受保护的虚方法来触发每个事件考虑添加属性变化事件当触发事件时要确保 sender ! nulll;如果合适的话请考虑使用泛型约束在返回 LINQ 表达式之前计算它的结果如果不是必须不要使用 this 和 base 关键字可维护性指南方法内部的代码段尽量不要超过 7 行确保所有成员私有类的类型默认为为 internal sealed避免双重条件在其包含的命名空间内命名程序集将源文件命名为它所包含的类型将源文件的内容限制为一种类型将不同的逻辑函数放到同一个部分类中在使用一个类型时使用 using 关键字导入需要的命名空间而不是类型的完整空间标识不要使用魔法数只有当类型显而易见时才使用 var 关键字定义变量时尽可能地初始化在相互独立的代码段中定义临时变量若对象有集合需要初始化的话在进行对象初始化的同时进行集合初始化不要显式进行 bool 值的比较避免嵌套循环在使用 if、else、do、while、for、foreach、case 的同时使用 {} 在 switch case 代码段中添加 default 逻辑在所有的 if 、else if 后再添加 else;避免使用多个返回值考虑使用简单的条件语句代替 if else封装属性、方法或局部函数中的复杂表达式再合适的情况下尝试重载方法使用可选参数来代替重载避免使用命名参数避免定义超过3个参数的签名避免函数签名为布尔类型不要将参数作为临时变量使用将模式作为操作不要注释代码命名指南不要在变量、参数和类型成员中包含数字不要在字段添加前缀不要使用缩写成员、参数和变量定义要根据它们代表的意义使用名词、名词短语或者形容词来定义类型使用描述性名称命名泛型参数在类成员中不要重复定义和类相同的名称成员定义可参考 .Net Framework 的定义方式避免使用可能被误解的段名称或字段正确定义属性在命名方法或局部函数时使用谓词或谓词对象使用名称、层、谓词和功能申明命名空间使用动词或动词前缀来定义事件使用 ing 和 end 后缀来表达事件预处理和发送事件使用 on 前缀来定义事件处理程序使用 Async 或者 TaskAsync 来标识异步方法性能指南使用 Any() 判断 IEnumerable 是否为空 仅对低密集型活动使用异步对于 CPU密集型使用 Task.Run避免同时将 async/await 和 Task.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. Millers BlogLINQ Framework Design GuidelinesBest Pracces for c# async/await原文地址https://www.cnblogs.com/hippieZhou/p/9410623.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com