Google命名规范
Google 风格指南中的 C# |风格指南 --- C# at Google Style Guide | styleguide
命名规则
Code
1.类、方法、枚举、公共字段、公共属性、命名空间的名称: PascalCase
2.局部变量、参数的名称: camelCase
3.私有、受保护、内部和受保护的内部字段和属性的名称: _camelCase
4.命名约定不受 const、static、readonly 等修饰符的影响
5.对于大小写,“单词”是没有内部空格的任何内容,包括首字母缩略词。例如, MyRpc
而不是 MyRPC
6.接口名称以 I
开头,例如 IInterface
Files 文件
1.文件名和目录名是 PascalCase
,例如 MyFile.cs
2.在可能的情况下,文件名应与文件中主类的名称相同,例如 MyClass.cs
3.通常,每个文件首选一个核心类。
空格规则
1.每行最多一个语句
2.每个语句最多一个赋值
3.缩进 2 个空格,无制表符。
4.列限制:100
5.开大括号前不换行
6.一元运算符与其操作数之间没有空格。运算符和所有其他运算符的每个操作数之间的一个空格。
using System; // `using` goes at the top, outside the // namespace. namespace MyNamespace { // Namespaces are PascalCase. // Indent after namespace. public interface IMyInterface { // Interfaces start with 'I' public int Calculate(float value, float exp); // Methods are PascalCase // ...and space after comma. } public enum MyEnum { // Enumerations are PascalCase. Yes, // Enumerators are PascalCase. No, } public class MyClass { // Classes are PascalCase. public int Foo = 0; // Public member variables are // PascalCase. public bool NoCounting = false; // Field initializers are encouraged. private class Results { public int NumNegativeResults = 0; public int NumPositiveResults = 0; } private Results _results; // Private member variables are // _camelCase. public static int NumTimesCalled = 0; private const int _bar = 100; // const does not affect naming // convention. private int[] _someTable = { // Container initializers use a 2 2, 3, 4, // space indent. } public MyClass() { _results = new Results { NumNegativeResults = 1, // Object initializers use a 2 space NumPositiveResults = 1, // indent. }; } public int CalculateValue(int mulNumber) { // No line break before opening brace. var resultValue = Foo * mulNumber; // Local variables are camelCase. NumTimesCalled++; Foo += _bar; if (!NoCounting) { // No space after unary operator and // space after 'if'. if (resultValue < 0) { // Braces used even when optional and // spaces around comparison operator. _results.NumNegativeResults++; } else if (resultValue > 0) { // No newline between brace and else. _results.NumPositiveResults++; } } return resultValue; } public void ExpressionBodies() { // For simple lambdas, fit on one line if possible, no brackets or braces required. Func<int, int> increment = x => x + 1; // Closing brace aligns with first character on line that includes the opening brace. Func<int, int, long> difference1 = (x, y) => { long diff = (long)x - y; return diff >= 0 ? diff : -diff; }; // If defining after a continuation line break, indent the whole body. Func<int, int, long> difference2 = (x, y) => { long diff = (long)x - y; return diff >= 0 ? diff : -diff; }; // Inline lambda arguments also follow these rules. Prefer a leading newline before // groups of arguments if they include lambdas. CallWithDelegate( (x, y) => { long diff = (long)x - y; return diff >= 0 ? diff : -diff; }); } void DoNothing() {} // Empty blocks may be concise. // If possible, wrap arguments by aligning newlines with the first argument. void AVeryLongFunctionNameThatCausesLineWrappingProblems(int longArgumentName, int p1, int p2) {} // If aligning argument lines with the first argument doesn't fit, or is difficult to // read, wrap all arguments on new lines with a 4 space indent. void AnotherLongFunctionNameThatCausesLineWrappingProblems( int longArgumentName, int longArgumentName2, int longArgumentName3) {} void CallingLongFunctionName() { int veryLongArgumentName = 1234; int shortArg = 1; // If possible, wrap arguments by aligning newlines with the first argument. AnotherLongFunctionNameThatCausesLineWrappingProblems(shortArg, shortArg, veryLongArgumentName); // If aligning argument lines with the first argument doesn't fit, or is difficult to // read, wrap all arguments on new lines with a 4 space indent. AnotherLongFunctionNameThatCausesLineWrappingProblems( veryLongArgumentName, veryLongArgumentName, veryLongArgumentName); } } }
人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。