1.文件和结构

1个文件只包含1个Public类
1个Public类中可以有多个内部类
“文件名”和“类名”必须相同

2.命名规范:见名知意

名词
命名空间、接口、类、结构体、枚举、属性、域、变量、常量
动词(短语)
方法
“_前缀”
“I前缀”
接口
“后缀Callback”
委托
“后缀EventHandler”
事件
“T”
泛型参数
暴露给外部的数据大写,内部使用的数据小写

3.常量

运行时static readonly
引用类型 || 会随着版本变化的数据
编译时const
值类型 && 不会随着版本变化的数据

4.字符串

拼接
量少时使用“+”,量大时使用StringBuilder
相等
str1.Equals(str2, StringComparison.OrdinalIgnoreCase)

5.描述相同数据类型的元素集合

数组
大小固定,性能较高,只读场景下须Clone()代价高
泛型集合
大小可变,性能稍差,可以转为ReadOnlyCollection
集合不能是null
没有元素时是空集合

6.结构体

用于存储数据
如果需要比较
请实现IEquatable
默认值
默认构造函数将struct初始化为0,必须将0定义为一个有意义的状态

7.类

字段
一个成员,表示与对象或类关联的变量
属性
通过get/set附加简单逻辑,暴露域
构造函数
初始化数据成员,做必须的工作;不要调用虚方法
方法
将输出参数放到最后
事件
引发事件的代码放到try...catch中(防止被异常终止程序)
回调
确定执行时机,不确定具体行为,由传递的委托确定
虚函数
留给子类重写实现
接口
定义行为契约
抽象类
抽象出共同的数据和行为;构造函数对外不可见protected
静态类
框架内的核心支持辅助类

8.前置条件不满足:用户错误 / 系统异常

用户错误
出问题了,责任在我(内因),更正后可以继续
系统异常
出问题了,责任在外部环境(外因),除非让环境变化,否则进行不下去
①共同点
通过检查前置条件,事先预测错误或异常
都是消息传递方式,分别由“错误码”/“异常类型”来区分消息
②不同点
用户错误通过正常流程返回,提示用户更正输入
系统异常直接抛出,告知调用程序环境不正常;可被try...catch处理:尝试修复 / 记录 / 重新抛出

1.可以参考一些.Net类库的源码,了解C#的编程风格