C#编码标准--编码习惯

0.  书写程序时的大小写规则:

a) 类:PascalCase表示法。如 MyClass

b) 枚举值:PascalCase表示法。如 Colors.Red

c) 枚举类型:PascalCase表示法。如 Colors

d) 事件:PascalCase表示法。如 MouseClick、ButtonDown

e) 异常类:PascalCase表示法。类名称以Exception为后缀,如 MyCustomException、WebServiceException

f) 接口:PascalCase表示法。接口名称以I为前缀,如 Icar

g) 方法:PascalCase表示法。如 GetItemData、UpdateModifiedValue

h) 命名空间:PascalCase表示。如 Company.Technology.Product、Company.NewApplication.DataTier

i) 属性:PascalCase表示法。如 ItemValue

j) 参数:camelCase表示法。如 itemArray、valueData、purchasePrice

k) 私有成员变量:camelCase表示法。如 myValue

养成好习惯:

1.  避免将多个类放在一个文件里面。

2.  一个文件应该只有一个命名空间,避免将多个命名空间放在同一个文件里面。

3.  一个文件最好不要超过500行的代码(不包括机器产生的代码)。

4.  一个方法的代码长度最好不要超过25行。

5.  避免方法中有超过5个参数的情况。使用结构来传递多个参数。

6.  每行代码不要超过80个字符。

7.  不要手工的修改机器产生的代码。

8.  如果需要编辑机器产生的代码,编辑格式和风格要符合该编码标准。

9.  避免利用注释解释显而易见的代码。

10. 代码应该可以自解释。好的代码由可读的变量和方法命名因此不需要注释。

11. 避免使用方法级的文档。

12. 使用扩展的API文档说明之。

13. 只有在该方法需要被其他的开发者使用的时候才使用方法级的注释。(在C#中就是///)

14. 不要硬编码数字的值,总是使用构造函数设定其值。

15. 只有是自然结构才能直接使用const,比如一个星期的天数。

16. 避免在只读的变量上使用const。如果想实现只读,可以直接使用readonly。

public class MyClass

{

public readonly int Number;

public MyClass(int someValue)

{

Number = someValue;

}

public  const int  DaysInWeek = 7;

}

17. 代码的每一行都应该通过白盒方式的测试。

18. 只抛出已经显示处理的异常。

19. 在捕获(catch)语句的抛出异常子句中(throw),总是抛出原始异常维护原始错误的堆栈分配。

catch(Exception exception)

{

MessageBox.Show(exception.Message);

throw ;  //和throw exception一样。

}

20. 避免方法的返回值是错误代码。

21. 尽量避免定义自定义异常类。

22. 当需要定义自定义的异常时:

a)  自定义异常要继承于ApplicationException。

b)  提供自定义的序列化功能。

23. 避免在单个程序集里使用多个Main方法。

24. 只对外公布必要的操作,其他的则为internal。

25. 使应用程序集尽量为最小化代码(EXE客户程序), 使用类库来替换包含的商务逻辑。

26. 避免给枚举变量提供显式的值。

//正确方法

public enum Color

{

Red,Green,Blue

}

//避免

public enum Color

{

Red = 1,Green = 2,Blue = 3

}

27. 即使if语句只有一句,也要将if语句的内容用大括号扩起来。

28. 避免使用trinary条件操作符。

29. 避免在条件语句中调用返回bool值的函数, 可以使用局部变量并检查这些局部变量。

bool IsEverythingOK()

{…}

//避免

if ( IsEverythingOK() )

{…}

//替换方案

bool ok = IsEverythingOK();

if ( ok )

{…}

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

31. 在循环中总是显式的初始化引用类型的数组。

public class MyClass

{

}

MyClass[] array = new  MyClass[100];

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

{

array[index] = new  MyClass();

}

32. 不要提供public 和 protected的成员变量,使用属性代替他们。

33. 避免在继承中使用new而使用override替换。

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

35. 除非使用interop(COM+ 或其他的dll)代码否则不要使用不安全的代码(unsafe code)。

36. 避免显示的转换,使用as操作符进行兼容类型的转换。

Dog dog = new GermanShepherd();

GermanShepherd shepherd = dog  as  GermanShepherd;

if ( shepherd != null )

{…}

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

a)  Copy a delegate to a local variable before publishing to avoid concurrency race

condition.

b)  在调用委托之前一定要检查它是否为null

public class MySource

{

public event EventHandler  MyEvent;

public void FireEvent()

{

EventHandler temp = MyEvent;

if(temp != null )

{

temp(this,EventArgs.Empty);

}

}

}

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

public class MySource

{

MyDelegate m_SomeEvent ;

public event MyDelegate SomeEvent

{

add

{

m_SomeEvent += value;

}

remove

{

m_SomeEvent -= value;

}

}

}

39. 使用一个事件帮助类来公布事件的定义。

40. 类和接口中的方法和属性至少为2:1的比例。

41. 避免一个接口中只有一个成员。

42. 尽量使每个接口中包含3-5个成员。

43. 接口中的成员不应该超过20个。

a)  实际情况可能限制为12个

44. 避免接口成员中包含事件。

45. 避免使用抽象方法而使用接口替换。

46. 在类层次中显示接口。

47. 推荐使用显式的接口实现。

48. 从不假设一个类型兼容一个接口。Defensively query for that interface.

SomeType obj1;

IMyInterface obj2;

/* 假设已有代码初始化过obj1,接下来 */

obj2 = obj1 as IMyInterface;

if (obj2 != null)

{

obj2.Method1();

}

else

{

//处理错误

}

49. 表现给最终用户的字符串不要使用硬编码而要使用资源文件替换之。

50. 不要硬编码可能更改的基于配置的字符串,比如连接字符串。

51. 当需要构建长的字符串的时候,使用StringBuilder不要使用string

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

a)  建议使用参数化构造函数

b)  可以重裁操作符

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

54. 能使用早期绑定就不要使用后期绑定。

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

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

57. 在switch语句中总是要有default子句来显示信息(Assert)。

int number = SomeMethod();

switch( number )

{

case 1:

Trace.WriteLine("Case 1:");

break;

case 2:

Trace.WriteLine("Case 2:");

break;

default :

Debug.Assert(false);

break;

}

58. 除非在构造函数中调用其他构造函数否则不要使用this指针。

// 正确使用this的例子

public class MyClass

{

public MyClass(string message )

{}

public MyClass()  : this("hello")

{}

}

59. 除非你想重写子类中存在名称冲突的成员或者调用基类的构造函数否则不要使用base来访问基类的成员。

// 正确使用base的例子

public class Dog

{

public Dog(string name)

{}

virtual public void Bark( int howLong )

{}

}

public class GermanShepherd : Dog

{

public GermanShepherd(string name): base (name)

{}

override public void Bark( int howLong )

{

base .Bark(howLong);

}

}

60. 基于模板的时候要实现Dispose()和Finalize()两个方法。

61. 通常情况下避免有从System.Object转换来和由System.Object转换去的代码,而使用强制转换或者as操作符替换。

class SomeClass

{}

//避免:

class MyClass<T>

{

void SomeMethod( T t )

{

object temp = t;

SomeClass obj = (SomeClass)temp;

}

}

// 正确:

class MyClass<T> where T : SomeClass

{

void SomeMethod(T t)

{

SomeClass obj = t;

}

}

62. 在一般情况下不要定义有限制符的接口, 接口的限制级别通常可以用强类型来替换之。

public class Customer

{…}

//避免:

public interface IList<T> where T : Customer

{…}

//正确:

public interface ICustomerList : IList<Customer>

{…}

63.  不确定在接口内的具体方法的限制条件。

64.  总是选择使用C#内置(一般的generics)的数据结构。

C#编码标准--编码习惯的更多相关文章

  1. javascript编码标准

    前面的话 编码标准是有争议的.几乎每个人都有自己的标准,但对标准应该是什么样的,则似乎很少能达成共识.但编码标准意味着,通过共同语言和一致的结构,把开发人员从无意义的工作中解放出来.允许开发人员把创新 ...

  2. VP9 vs H.265——下一代视频编码标准的王道之争

    目前下一代主流的视频编码标准有 ITU-T VCEG 推出来的 H.265 和 Google 推出 VP9 . H.265 在 H.264 的基础上保留其中的部分技术,并对相关技术加以改进研发而成.新 ...

  3. Java安全编码标准

    Java安全编码标准 具体参考Rules 输入验证和数据净化(IDS)规则风险评估概要 IDS00-J净化穿越受信边界的非受信数据 IDS01-J验证前标准化字符串 IDS02-J在验证之前标准化路径 ...

  4. 视频基础知识:浅谈视频会议中H.264编码标准的技术发展

    浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...

  5. C# 编码标准(二)

    先八卦一下,昨天写了C# 编码标准(一),得到了@h82258652的补充,感到非常欣慰,一是感觉他的观点扩展了我的视野,丰富了我的看法,所以更坚定了我继续写博客的想法,由于是五笔打字,经常不写东西, ...

  6. 防微杜渐——读《C安全编码标准》

    防微杜渐——读<C安全编码标准> 首先这本书的名字是非常洋气的——<C安全编码标准>.然而映入眼帘的却不仅仅是冷冰冰的编码,还有那一套非常严谨的风险评估标准和问题处理方法.对于 ...

  7. 音视频处理之H264编码标准20170906

    一. H264基础概念 1.名词解释 场和帧 :    视频的一场或一帧可用来产生一个编码图像.在电视中,为减少大面积闪烁现象,把一帧分成两个隔行的场. 片:             每个图象中,若干 ...

  8. 系统编码 python编码

    编码一直都是一个很让人头疼的问题,尤其是在python里面.花了几天时间,终于把这个问题给弄明白了. 一,什么是编码,编码过程是怎样的?常见的编码方式有哪些? 编码是从一个字符,比如'哈',到一段二进 ...

  9. dos命令窗口修改编码,CMD编码修改方法

    dos命令窗口修改编码,CMD编码修改方法 第一步,打开命令窗口有两种方法第一种:可以点击左下角的开始按钮,在运行里面输入CMD,然后敲回车2第二种:组合键WIN+R键,组合键后就会弹出窗口,然后输入 ...

随机推荐

  1. JAVA三大框架SSH的各自作用

        一.Spring Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯. Spring的 ...

  2. Backward_chaining

    http://en.wikipedia.org/wiki/Backward_chaining

  3. iOS 9之Safari广告拦截器(Content Blocker)

    金田( github 示例源码) 相对于谷歌对广告拦截的禁止,苹果与之态度截然相反,继Mac版Safari加入广告拦截工具之后,即将到来的iOS9对Safari也引入了内容拦截插件-Content B ...

  4. 笔记:java并发实践2

    public interface Executor { void execute(Runnable command); } 虽然Executor是一个简单的接口,但它为灵活且强大的异步任务框架提供了基 ...

  5. ortp使用详解1

    一: 关于 oRTP oRTP 是一款开源软件,实现了 RTP 与 RTCP 协议.目前使用 oRTP 库的软件主要是linphone(一款基于IP 进行视频和语音通话的软件). oRTP作为 lin ...

  6. HDU_2034——集合A-B

    Problem Description 参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法 ...

  7. HDU_2028——求多个数的最小公倍数

    Problem Description 求n个数的最小公倍数.   Input 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数.   Output 为每组测试数据输出它们的最 ...

  8. [LeetCode] Course Schedule I (207) & II (210) 解题思路

    207. Course Schedule There are a total of n courses you have to take, labeled from 0 to n - 1. Some ...

  9. POI操作Excel2007实例二之“SXSSFWorkbook”处理海量数据

    转自:http://blog.csdn.net/little_stars/article/details/8266262 前文讲述了 POI 读取的基本操作,但后期 经过试验,当写入数据量超过5万条以 ...

  10. 一、spark 数据类型(Data Types)

    Data Types - MLlib(数据类型)       MLlib支持存储在单机上的局部向量和局部矩阵,也可以支持通过一个或多个RDD(可伸缩数据集)表示的分布式矩阵.局部向量和局部矩阵是用作公 ...