01编码规范(4)

2018-12-23 23:57

{

Red,Green,Blue } //避免

public enum Color {

Red = 1,Green = 2,Blue = 3 }

27. 避免指定特殊类型的枚举变量。 //避免

public enum Color : long {

Red,Green,Blue }

28. 即使if语句只有一句,也要将if语句的内容用大括号扩起来。 29. 避免使用trinary条件操作符。

30. 避免在条件语句中调用返回bool值的函数。可以使用局部变量并检查这些局部变量。 bool IsEverythingOK() {?} //避免

if (IsEverythingOK ()) {?} //替换方案

bool ok = IsEverythingOK(); if (ok) {?}

31. 总是使用基于0开始的数组。

32. 在循环中总是显式的初始化引用类型的数组。 public class MyClass {}

- 16 -

MyClass[] array = new MyClass[100];

for(int index = 0; index < array.Length; index++) {

array[index] = new MyClass(); }

33. 尽量不要提供public 和 protected的成员变量,使用属性代替他们。 34. 避免在继承中使用new而使用override来进行替换。

35. 在不是sealed的类中总是将public 和 protected的方法标记成virtual的。

36. 除非使用interop(COM+ 或其他的dll)代码否则不要使用不安全的代码(unsafe code)。 37. 避免显式的转换,使用as操作符进行兼容类型的转换。 Dog dog = new GermanShepherd();

GermanShepherd shepherd = dog as GermanShepherd; if (shepherd != null ) {?}

38. 当类成员包括委托的时候

a) 在调用委托前,将它拷贝到一个本地变量中,用以避免并发争用条件。 b) 在调用委托之前一定要检查它是否为null public class MySource {

public event EventHandler MyEvent; public void FireEvent() {

//将委托拷到一个本地变量中。 EventHandler temp = MyEvent;

//确定它是否为空 if(temp != null ) {

temp(this,EventArgs.Empty); }

- 17 -

} }

39. 不要提供公共的事件成员变量,使用事件访问器替换这些变量。 public class MySource {

MyDelegate m_SomeEvent ; public event MyDelegate SomeEvent { add {

m_SomeEvent += value; } remove {

m_SomeEvent -= value; } } }

40. 使用一个事件帮助类来公布事件的定义。 41. 总是使用接口。

42. 类和接口中的方法和属性至少为2:1的比例。 43. 避免一个接口中只有一个成员。 44. 尽量使每个接口中包含3-5个成员。 45. 接口中的成员不应该超过20个。

a) 根据实际情况可能限制为12个 46. 避免接口成员中包含事件。 47. 避免使用抽象方法而使用接口替换。 48. 在类层次中显示接口。 49. 推荐使用显式的接口实现。

50. 从不假设一个类型兼容一个接口,并应防止查询那些接口。

- 18 -

SomeType obj1; IMyInterface obj2;

/* 假设已有代码初始化过obj1,接下来 */ obj2 = obj1 as IMyInterface; if (obj2 != null) {

obj2.Method1(); } else {

//处理错误 }

51. 表现给最终用户的字符串(一般指UI界面中的部分)不要使用直接编码,而应该要使用资源文件来替换。

52. 不要直接编写可能会更改的基于配置的字符串,比如连接字符串。

53. 当需要构建较长的字符串的时候,应该考虑使用StringBuilder不要使用string来处理。

注:string每次要创建一个新的实例,较占用空间,并产生了相对StringBuilder更大的性能消耗。对于过于频繁的字符串操作,采用StringBuilder是一个良好的习惯。

54. 避免在结构里面提供方法。

a) 建议使用参数化构造函数 b) 可以重载操作符

55. 总是要给静态变量提供静态构造函数。

- 19 -

注:这样做的目的是方便软件的本地化。

56. 在能够使用早期绑定的情况下,尽量避免使用后期绑定。

注:后期绑定虽然灵活,但带来的不仅仅是性能上的消耗,更多的是编码上的复杂性和混乱的逻辑。

57. 使用应用程序的日志和跟踪。

58. 除非在不完全的switch语句中否则不要使用goto语句。

注:原则上不应使用goto语句,除非在能够大大减轻编码的复杂性,并不影响可读性的前提下才允许使用。

59. 在switch语句中总是要有default子句来显示信息(Assert)。 int number = SomeMethod(); switch(number) { case 1:

Trace.WriteLine(\1:\ break; case 2:

Trace.WriteLine(\2:\ break; default :

Debug.Assert(false); break; }

60. 除非在构造函数中调用其他构造函数否则不要使用this指针。 // 正确使用this的例子 public class MyClass {

public MyClass(string message ) {}

public MyClass() : this(\

- 20 -


01编码规范(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2010-2011通信原理期末考试试卷及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: