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
你还可以【关注我】,我会经常更新博客的 ;D