知识大全 C#编码标准--编码习惯
Posted 知
篇首语:学习如钻探石油,钻得愈深,愈能找到知识的精髓。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#编码标准--编码习惯相关的知识,希望对你有一定的参考价值。
C#编码标准--编码习惯 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
避免将多个类放在一个文件里面
一个文件应该只有一个命名空间 避免将多个命名空间放在同一个文件里面
一个文件最好不要超过 行的代码(不包括机器产生的代码)
一个方法的代码长度最好不要超过 行
避免方法中有超过 个参数的情况 使用结构来传递多个参数
每行代码不要超过 个字符
不要手工的修改机器产生的代码
a) 如果需要编辑机器产生的代码 编辑格式和风格要符合该编码标准
b) 尽可能使用分部类来提出需要维护的部分
避免利用注释解释显而易见的代码
a) 代码应该可以自解释 好的代码由可读的变量和方法命名因此不需要注释
避免使用方法级的文档
a) 使用扩展的API文档说明之
b) 只有在该方法需要被其他的开发者使用的时候才使用方法级的注释 (在C#中就是///)
不要硬编码数字的值 总是使用构造函数设定其值
只有是自然结构才能直接使用const 比如一个星期的天数
避免在只读的变量上使用const 如果想实现只读 可以直接使用readonly
public class MyClass
public readonly int Number;
public MyClass(int someValue)
Number = someValue;
public const int DaysInWeek = ;
每个假设必须使用Assert检查
a) 平均每 行要有一次检查(Assert)
using System Diagnostics;
object GetObject()
…
object obj = GetObject()
Debug Assert(obj != null)
代码的每一行都应该通过白盒方式的测试
只抛出已经显示处理的异常
在捕获(catch)语句的抛出异常子句中(throw) 总是抛出原始异常维护原始错误的堆栈分配
catch(Exception exception)
MessageBox Show(exception Message)
throw ; //和throw exception一样
避免方法的返回值是错误代码
尽量避免定义自定义异常类
当需要定义自定义的异常时
a) 自定义异常要继承于ApplicationException
b) 提供自定义的序列化功能
避免在单个程序集里使用多个Main方法
只对外公布必要的操作 其他的则为internal
避免友元程序集 因为它能增加间装配耦合
避免代码依赖于从特定位置运行的程序集
使应用程序集尽量为最小化代码(EXE客户程序) 使用类库来替换包含的商务逻辑
避免给枚举变量提供显式的值
//正确方法
public enum Color
Red Green Blue
//避免
public enum Color
Red = Green = Blue =
避免指定特殊类型的枚举变量
//避免
public enum Color : long
Red Green Blue
即使if语句只有一句 也要将if语句的内容用大括号扩起来
避免使用三目条件操作符
避免在条件语句中调用返回bool值的函数 可以使用局部变量并检查这些局部变量
bool IsEverythingOK()
…
//避免
if (IsEverythingOK ())
…
//替换方案
bool ok = IsEverythingOK()
if (ok)
…
总是使用基于 开始的数组
在循环中总是显式的初始化引用类型的数组
public class MyClass
MyClass[] array = new MyClass[ ];
for(int index = ; index < array Length; index++)
array[index] = new MyClass()
不要提供public 和 protected的成员变量 使用属性代替他们
避免在继承中使用new而使用override替换
在不是sealed的类中总是将public 和 protected的方法标记成virtual的
除非使用interop(+ 或其他的dll)代码否则不要使用不安全的代码(unsafe code)
避免显示的转换 使用as操作符进行兼容类型的转换
Dog dog = new GermanShepherd()
GermanShepherd shepherd = dog as GermanShepherd;
if (shepherd != null )
…
当类成员包括委托的时候
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)
不要提供公共的事件成员变量 使用事件访问器替换这些变量
public class MySource
MyDelegate m_SomeEvent ;
public event MyDelegate SomeEvent
add
m_SomeEvent += value;
remove
m_SomeEvent = value;
使用一个事件帮助类来公布事件的定义
总是使用接口
类和接口中的方法和属性至少为 : 的比例
避免一个接口中只有一个成员
尽量使每个接口中包含 个成员
接口中的成员不应该超过 个
a) 实际情况可能限制为 个
避免接口成员中包含事件
避免使用抽象方法而使用接口替换
在类层次中显示接口
推荐使用显式的接口实现
从不假设一个类型兼容一个接口
SomeType obj ;
IMyInterface obj ;
/* 假设已有代码初始化过obj 接下来 */
obj = obj as IMyInterface;
if (obj != null)
obj Method ()
else
//处理错误
表现给最终用户的字符串不要使用硬编码而要使用资源文件替换之
不要硬编码可能更改的基于配置的字符串 比如连接字符串
当需要构建长的字符串的时候 使用StringBuilder不要使用string
避免在结构里面提供方法
a) 建议使用参数化构造函数
b) 可以重裁操作符
总是要给静态变量提供静态构造函数
能使用早期绑定就不要使用后期绑定
使用应用程序的日志和跟踪
除非在不完全的switch语句中否则不要使用goto语句
在switch语句中总是要有default子句来显示信息(Assert)
int number = SomeMethod()
switch(number)
case :
Trace WriteLine( Case : )
break;
case :
Trace WriteLine( Case : )
break;
default :
Debug Assert(false)
break;
除非在构造函数中调用其他构造函数否则不要使用this指针
// 正确使用this的例子
public class MyClass
public MyClass(string message )
public MyClass() : this( hello )
除非你想重写子类中存在名称冲突的成员或者调用基类的构造函数否则不要使用base来访问基类的成员
// 正确使用base的例子
public class Dog
public Dog(string name)
virtual public void Bark( int howLong)
public class GermanShepherd : Dog
public GermanShe pherd(string name) base (name)
override public void Bark(int howLong)
base Bark(howLong)
基于模板的时候要实现Dispose()和Finalize()两个方法
通常情况下避免有从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;
在一般情况下不要定影有限制符的接口 接口的限制级别通常可以用强类型来替换之
public class Customer
…
//避免
public interface IList<T> where T : Customer
…
//正确
public interface ICustomerList : IList<Customer>
…
不确定在接口内的具体方法的限制条件
cha138/Article/program/net/201311/12176相关参考
知识大全 C# 让WebClient使用gzip编码,并解压
C#让WebClient使用gzip编码,并解压 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
微型计算机中字符编码用_____。A、原码B、反码C、ASCII码D、补码答案:C解析:ASCII是基于拉丁字母的一套电脑编码系统。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC646
示例代码展示了多种解决互联网应用程序开发的方法 开发互联网应用程序是非常复杂的你不仅要实现定义应用程序的行为和逻辑还必须在分布式环境下将多种产品技术层次和标准结合在一起 例如考虑一个几
阀体属于什么税收分类编码?1、阀体属于“阀门”税收分类,编码是10901190100000000002、税收分类编码选择(1)税收分类编码部分编码税率和会计所需实际税率不一致,可以先调用出税收分类编码
豆油的税收分类编码是哪一类请参考如下编码:1030105010100000000大豆油 电蚊香在税收分类编码属哪一类1、电蚊香在税收分类编码属中草药材,编码为10101172、税收分类编码选择(1)税
绿化公司属于哪种税收分类编码,如何查询检索?1、绿化公司属于"其他建筑服务"税收分类编码3059900。2、税收分类编码查询进入开票软件后,点击“系统设置”-“编码管理”-“商品和服务税收分类编码”,
编码方案.编码和解码 数据压缩过程称为编码即将文件中的每个字符均转换为一个惟一的二进制位串 数据解压过程称为解码即将二进制位串转换为对应的字符.等长编码方案和变长编码方案 给定的字符集C可能存在
浅析PHP中的字符串编码转换(自动识别原编码) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本篇文
增值税普通发票开票软件里的税收分类编码怎么写增值税普通发票开票软件里的税收分类编码需要从税务局的编码中选择,最低层明细编码可以自己手工编写。开增值税普通发票税收分类编码怎么填写商品和服务税收分类与编码
怎么查询税务编码如武汉国税14201000武汉地税2420100地区编码就是税务机关代码!如果想知道详细的可以下载税务资料调查的税务机关代码,ntss系统的数据!涵曦查询编码怎么查询去公众号查一下授权