C#现代代码风格指南
参考资料: asp.net 主页仓库
代码风格 —— 一般原则
最通用的指导原则是我们使用所有的VS默认设置的代码格式,除了我们把系统命名空间放在其他命名空间之前(这在VS中是默认的,但是在VS的更新版本中已经改变了)。
- 使用四个空格缩进(不用Tab)
- 私有字段使用
_camelCase - 除非必要,避免使用
this. - 始终指定成员的可见性,即使你将使用的可见性和默认可见性一致
- 开放的大括号(
{)要另起一行 - 你可以使用任何可用的语言特性,但是你要保持代码易读、易于维护
- 举一个反例:
public (int, string) GetData(string filter) => (Data.Status, Data.GetWithFilter(filter ?? throw new ArgumentNullException(nameof(filter)))); - 这是一条很难读懂的语句
- 举一个反例:
使用var声明变量
只要编译器允许,那么尽可能的使用var声明变量,比如下面的代码:
var fruit = "Lychee";
var fruits = new List<Fruit>();
var flavor = fruit.GetFlavor();
string fruit = null; // can't use "var" because the type isn't known (though you could do (string)null, don't!)
const string expectedName = "name"; // can't use "var" with const
反面例子:
string fruit = "Lychee";
List<Fruit> fruits = new List<Fruit>();
FruitFlavor flavor = fruit.GetFlavor();
在公共API中只使用完整的单词或通用/标准缩写
公共名称空间,类型名称,成员名称和参数名称必须使用完整的单词或通用/标准缩写。
示例:
public void AddReference(AssemblyReference reference);
public EcmaScriptObject SomeObject { get; }
反例:
public void AddRef(AssemblyReference ref);
public EcmaScriptObject SomeObj { get; }
使用C#类型关键字,而不是.Net Type名
例如:
public string TrimString(string s) {
return string.IsNullOrEmpty(s)
? null
: s.Trim();
}
var intTypeName = nameof(Int32); // can't use C# type keywords with nameof
反例:
public String TrimString(String s) {
return String.IsNullOrEmpty(s)
? null
: s.Trim();
}
异步方法模式
默认情况下,所有异步方法都必须具有Async后缀
扩展方法模式
一般的规则是:如果一个普通的静态方法就足够了,避免使用扩展方法。
扩展方法通常对创建可链式调用的方法非常有用,例如,在构建复杂对象或创建查询时。
内部扩展方法是允许的,但要记住先前的指导方针:拍拍胸脯问问自己,扩展方法是否真的是最合适的模式。
扩展方法类的名称空间通常应该是表示扩展方法功能的名称空间,而不是目标类型的名称空间,一个常见的例外是中间件扩展方法的命名空间通常总是与IAppBuilder的命名空间相同。
扩展方法容器(也称为“sponsor type”)的类名通常应遵循<Feature>Extensions,<Target><Feature>Extensions或<Feature> <Target>Extensions的模式。例如:
namespace Food {
class Fruit { ... }
}
namespace Fruit.Eating {
class FruitExtensions { public static void Eat(this Fruit fruit); }
OR
class FruitEatingExtensions { public static void Eat(this Fruit fruit); }
OR
class EatingFruitExtensions { public static void Eat(this Fruit fruit); }
}
在编写接口的扩展方法时,sponsor type名称不能以I开头。
Doc comments
编写代码的人将写入Doc comments,仅限公共API。非公开类型不需要Doc comments。
注:public意味着下游可以调用,所以它包含受保护的API。但是,一些公共API可能仍然是“仅供内部使用”,但由于技术原因需要公开。我们仍然会针对这些API提供文档,但是会根据情况进行记录。
常量定义
常量的定义使用帕斯卡命名法,避免使用全大写命名
例如:
public const string HashKey="ie832js834u9f9wq3h";
错误:
public const string HASH_KEY="ie832js834u9f9wq3h";
缩写算作单词,避免使用全字符大写
例如:
var api ="...
public void FindApi(...
错误:
var API ="...
public void FindAPI(...
例如常见的WTO是缩写,但是建议算作单词,写为 Wto、wto而不是WTO
C#现代代码风格指南的更多相关文章
- 《Google 代码风格指南》
<Google 代码风格指南> https://github.com/google/styleguide
- python的PEP8 代码风格指南
PEP8 代码风格指南 这篇文章原文实际上来自于这里:https://www.python.org/dev/peps/pep-0008/ 知识点 代码排版 字符串引号 表达式和语句中的空格 注释 版本 ...
- C++代码风格指南总结
C++代码风格指南 代码风格的重要性 今天我收到thougthwork笔试没过的消息, 心里确实很难受, 然后师兄说我代码写得很糟糕 细想一下, 我写代码确实是随心所欲, 并没有遵循什么规范; 所以现 ...
- Google JavaScript代码风格指南
Google JavaScript代码风格指南 修正版本 2.28 Aaron Whyte Bob Jervis Dan Pupius Eric Arvidsson Fritz Schneider R ...
- 大神的JS代码风格指南
js代码风格指南:1.缩进使用空格,不要用制表符2.必须用分号3.暂时不用ES6(modules)例如export和import命令4.不鼓励(不禁止)水平对齐5.少用var 都应该使用const或者 ...
- 读 Angular 代码风格指南
读 Angular 代码风格指南 本文写于 2021 年 1 月 17 日 原文地址:Angular 文档 该文章拥有完整的代码风格指南--大到如何编排文件夹,小到如何进行变量命名都涉及.但是与 ng ...
- python代码风格指南:pep8 中文翻译
摘要 本文给出主Python版本标准库的编码约定.CPython的C代码风格参见PEP7.本文和PEP 257 文档字符串标准改编自Guido最初的<Python Style Guide&g ...
- python代码风格指南:pep8 中文版
本文档所提供的编码规范,适用于主要的Python发行版中组成标准库的Python代码.请参阅PEP关于Python的C实现的C编码风格指南的描述. 本文档和PEP257(文档字符串规范)改编自Guid ...
- Google代码风格指南
官网:https://github.com/google/styleguide 中文版:https://github.com/zh-google-styleguide/zh-google-styleg ...
- GO代码风格指南 Uber Go (转载)
原文地址:https://github.com/uber-go/guide/blob/master/style.md 译文出处:https://github.com/uber-go/guide 本文永 ...
随机推荐
- 4种方法让SpringMVC接收多个对象(转:http://blog.csdn.net/lutinghuan/article/details/46820023)
问题背景: 我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该如何处理? 第1种方法:表单提交,以字段数组接收: 第2种方 ...
- 获取request参数的工具类
package cn.edu.hactcm.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOE ...
- markdown简易快速的编辑格式(易读易写)
实现简单快速书写,格式指定简便.易读易写 讲解http://wowubuntu.com/markdown/ 简单使用的讲解:http://www.ituring.com.cn/article/23 代 ...
- Pollution over East China : Image of the Day
acquired October 16, 2002download large image (2 MB, JPEG, 6000x4600) acquired October 16, 2002downl ...
- SwipeRefreshLayout实现上拉下拉刷新
1:在布局中添加SwipeRefreshLayout和Listview组件 [html] view plain copy <?xml version="1.0" encodi ...
- STL - 容器共性机制研究
C++模板是容器的概念. 理论提高:所有容器提供的都是值(value)语意,而非引用(reference)语意.容器执行插入元素的操作时,内部实施拷贝动作.所以STL容器内存储的元素必须能够被拷贝(必 ...
- GitHub前50名的Objective-C动画相关库相关推荐,请自行研究
GitHub的Objective-C的动画UI库其实是最多的一部分,GitHub有相当一部分的动画大牛,如Jonathan George,Nick Lockwood,Kevin,Roman Efimo ...
- DB Query Analyzer 6.03, the most excellent Universal DB Access tools on any Microsoft Windows OS
DB Query Analyzer 6.03, the most excellent Universal database Access tools on any Microsoft Wind ...
- git分享:Git_MinaPro
Apache MINA+MyBatis+EHcache定制开发,实现终端设备数据的实时接收解析存储. <项目运行:打包下载所有文件导入Eclipse,将datapro.sql导入mysql数据库 ...
- 快递单号查询免费api接口(PHP示例)
快递单号查询API,可以对接顺丰快递查询,邮政快递查询,中通快递查询等.这些快递物流企业,提供了快递单号自动识别接口,快递单号查询接口等快递物流服务.对于电商企业,ERP服务企业,集成此接口到自己的软 ...