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)的数据结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 是的,微软有自己的C编码规范。微软在其C编码规范中提供了一些最佳实践和指南,以帮助开发人员编写高质量、可维护和可扩展的C代码。 微软的C编码规范包括以下几个方面的内容: 1. 命名规则:包括变量、函数、结构体、枚举等的命名规则,建议使用清晰、具有描述性的命名,避免使用单个字母或缩写。 2. 代码格式:包括缩进、空格、换行等方面的规范,建议使用一致的代码格式,以增加代码的可读性。 3. 注释规范:包括注释的位置、格式和内容等,建议在关键代码段添加注释,解释代码的意图和功能。 4. 错误处理:包括如何处理错误、异常和边界情况,建议使用适当的错误处理机制,以确保代码的健壮性和可靠性。 5. 内存管理:包括内存的分配、释放和管理等方面的规范,建议及时释放不再使用的内存,避免内存泄漏和悬挂指针等问题。 6. 安全性:包括防止缓冲区溢出、处理敏感信息和验证输入等方面的规范,建议在编写代码时考虑安全性,以提高代码的安全性和可靠性。 通过遵循微软的C编码规范,开发人员可以编写出清晰、可读性强且易于维护的C代码,提高开发效率和代码质量。 ### 回答2: 是的,微软有C#编码规范C#是微软开发的一种面向对象的编程语言,为了统一代码风格和保证代码质量,微软在开发C#时也制定了相应的编码规范C#编码规范主要包括代码布局、命名规范、代码注释、异常处理、代码格式等方面。其中,代码布局指的是代码的缩进、空格的使用、换行等格式规范;命名规范涉及变量、方法、类等的命名风格;代码注释则是为了更好地解释代码的功能、逻辑等,增加代码的可读性;异常处理规范主要包括正确地处理异常、使用try-catch语句等;代码格式涉及代码的可读性、可维护性等。 遵循C#编码规范能够使代码具有一致的风格,并且易于理解、维护和修改。而且,遵循编码规范还有助于团队协作,提高代码的质量和可维护性。 在微软的官方文档中,可以找到详细的C#编码规范,开发人员可以根据规范进行编码,以保证代码的一致性和质量。这些规范也是微软在长期开发经验中总结出来的最佳实践,对于开发高质量的C#代码非常有帮助。 ### 回答3: 是的,微软有C编码规范。微软通过其官方文档提供了一套详细的C编码规范,以帮助开发人员编写更安全、可靠和高效的C代码。这些规范包括命名约定、代码布局、错误处理、内存管理、注释等方面的指导。通过遵循微软的C编码规范,开发人员可以减少编程错误,提高代码的可读性和维护性。遵循这些规范还可以提高代码的可移植性,因为它们是按照跨平台和跨编译器的标准编写的。微软的C编码规范是经过长期实践和经验总结的,它体现了微软在软件开发领域的专业知识和最佳实践。开发人员可以在微软的官方网站上找到这些规范,并将其应用于他们的C代码开发中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值