总之就是写了会儿C#,但深感在这么写下去也学不会什么,感觉还是要学一下编程规范。
参考链接如下: C# 編碼慣例 C# Coding Style
前者会有些实例,虽然读起来仿佛机翻。
命名规范
pascal命名法的大小写(PascalCasing
为class、struct命名时,record需要用Pascal大小写。命名public类型的成员同样使用pascal大小写(完蛋我发现我这个一直是错的:(如下
public record PhysicalAddress(
string Street,
string City,
string StateOrProvince,
string ZipCode);
命名interface时,在名称前加上大写I,如下
public interface IWorkerQueue
{
}
位置记录,针对参数使用pascal大小写。不过实话实说并没用过record。
public record PhysicalAddress(
string Street,
string City,
string StateOrProvince,
string ZipCode);
Camel大小写(CamelCasing
命名private的internal变量时使用Camel,并在前面加上前置_。(这我也从来没这么写过:(
public class DataService
{
private IWorkerQueue _workerQueue;
}
static修饰的变量前置s_,thread static修饰的变量前置t_。在static修饰下,使用static readonly,不要把顺序反过来。
public class DataService
{
private static IWorkerQueue s_workerQueue;
[ThreadStatic]
private static TimeSpan t_timeSpan;
}
方法参数,使用camel
public T SomeMethod<T>(int someNumber, bool isValid)
{
}
其他命名规范
如果代码太长,可以在“.”之后终端名称
版面配置规范
- 文字编译器设置
- 每行一句话
- 方法定义和属性定义之间差一空白行。属性就是拥有两个类似于函数的代码块,一个用于获取属性的值(get),一个用于设置属性的值(set),这两个块也称为访问器,可以用于控制对属性的访问级别。C#定义类属性
- 连续行不会自动缩排,则缩排4个空格(理想状态下是一个tab
- 用括号分割运算式中的子句
if ((val1 > val2) && (val1 > val3))
{
// Take appropriate action.
}
批注
- 单独一行
- 开头字母大写
- 句号结束
- “//”后加空格
- 公有成员有必要的XML批注
当然,其实我很可能用中文做注释,有的东西不用在意(doge
语言指导方针
字符串
- 字符串内插补点
- 大量文字使用StringBuilder
隐含类型
- var类型在右侧的精确类型较为明确时使用。同时不要乐观地认为右侧类型时明确的。
- 不要使用var取代dynamic,类型动态
- 用var判断for循环中的变量,但不要在foreach中使用
不带正负号的类型
就是多用int,不要随便用unsigned
阵列
在声明时初始化阵列时,保持简洁。
string[] vowels1 = { "a", "e", "i", "o", "u" };
var vowels2 = new string[] { "a", "e", "i", "o", "u" };
var vowels3 = new string[5];
vowels3[0] = "a";
vowels3[1] = "e";
// And so on.
委派
C# 委派。类似C++中的函数指针。
支持多使用Func<>和Action<>。
try-catch和using语句
- 多用try-catch
- 多用using,可以简化代码
&&和||
在&&和&,||和|等效的时候多用前者
new
一个比较简洁的写法
var instance3 = new ExampleClass { Name = "Desktop", ID = 37414,
Location = "Redmond", Age = 2.3 };
甚至可以跳过初始化运算式。
事件处理
多用lambda运算式
不过讲道理这样不会影响代码可读性吗,还是说默认lambda其实是个很基础的东西
静态成员
不要在衍生类中加入同名的静态成员
LINQ查询
- 为查询设置有意义的名称
- 使用别名保证变量名的规范(啊这
- 为了避免混淆用别名称呼属性名称
- 多用from而不是join
当然LINQ我也没用过,甚至我就不会SQL(非常后悔不学一下数据库
看得越多感觉不会的越多(毕竟也没有系统学过C#的用法,大多情况都是一力降十会)。如果有时间还是要好好看一些设计理念。虽然可能没有用但是好玩哈哈哈。
关于工程能力还是要加强啊,感觉目前的代码风格距离工程师还有很远很远。