.NET 设计规范--.NET约定、惯用法与模式--8.使用规范
这里就如何在公用API中使用常用类型提供提供一些规范。
8.1数组
要在公用API中优先使用集合,而不是优先使用数组。
不要使用只读的数组字段。虽然字段本身是只读的,用户不能对其进行修改,但对用户可以修改数组中的元素
有两种方法可以避免使用只读的数组字段,一种是使用只读的集合,另一种是在返回数组之前对其进行复制
考虑使用不规则数组(jagged array),而不是要使用多维数组
//jagged arrays
int [][] jaggedArray={
new int[]{1,2,3,4},
new int[]{5,6,7},
new int[]{8},
new int[]{9}
};
//multidimension arrays
int [,] multidmensional arrays
{
{1,2,3,4},
{5,6,70},
{8,0,0,0},
{9,0,0,0}
}
8.2 attribute
System.Attribute 是个基类,用户可以用它来定制自己的attribute。
当使用attribute时,有一些属性是必须由用户指定。用于这些属性通过构造函数中的必填参数来表示,因此称为必填属性(required property)或必填参数(required argument)。
当使用attribute时,不是必须指定的那些属性称为可选属性(optional property)或可选参数(optional argument),它们通过可设置的属性来表示。
要在命名自定义attribute类时添加"Attribute"后缀
要在定义自己的attribute时使用AttriubteUsageAttribute
要为可选参数提供可设置的属性
要为必填参数提供自读属性
要提供工作函数参数来对必填参数进行初始。每个参数名应该与相应的属性名相同
避免提供构造函数参数来对于可选参数对应的属性进行初始
避免对自定义attribute的构造函数进行重载
要尽可能将自定义attribute类密封起来。这样会使查找attribute更快
8.3 集合
为了对一组有共同特征的对象进行操作而特别设计的任何类型,都可以称为集合(Collection)。
不要在公有API中使用弱类型集合,如果返回值和参数表示一个集合元素,那么其类型应该与元素类型完全一致,而不应该使元素类型的任何基类。
不要在公有API中使用ArrayList或List<T>
不要在公有API中使用Hashtable或Dictionary<TKey,TValue>
不要使用IEnumberator<T>、IEnumreator或实现了这两个接口之一的任何其他类型,触发是作为GetEnumerator方法的返回值。