先八卦一下,昨天写了C# 编码标准(一),得到了@h82258652的补充,感到非常欣慰,一是感觉他的观点扩展了我的视野,丰富了我的看法,所以更坚定了我继续写博客的想法,由于是五笔打字,经常不写东西,有些字的字根都忘记了,所以通过写博客也可以多记些字根,二是决定把多年的一些东西分享出来,一起沟通交流,这样也能够共同进步,共同成长。

一、编码实践

1、一个文件的代码避免超过500行。当然这个在特殊情况下也是可以的,只是一个建设吧!

2、方法要避免超过25行。当然这个在特殊情况下也是可以的,只是一个建设吧!

3、每行不要超过80个字符。

4、不要手动编辑任何机器代码。

5、避免对显而易见的代码作注释,代码应该是自解释的,由可读性强的变量和方法组成的好的代码应该不需要注释。

6、除了“0”与“1”, 不要用数值硬编码,声明一个常量代替。

7、仅对本来就是常量的值使用const修饰符,例如一周的天数。

8、避免对只读的变更使用const,在此情况下,使用readonly修饰符:

public class MyClass
{
public const int DaysInWeek = ;
public readonly int Number; public MyClass(int someValue)
{
Number = someValue;
}
}

9、仅捕捉你需要显式处理的异常。

10、在抛出异常的catch语句中,总是抛出最初异常(或由最初异常构建的另一个异常),以保持最初错误的堆栈位置。

第一种:
catch(Exception ex)
{
MessageBox.Show(ex.Message);
throw; // 等同于抛出原始异常
}
第二种:
catch(Exception ex)
{
MessageBox.Show(ex.Message);
throw ex; // 这样会吃掉异常点,重置堆栈中的异常起始点
}
第三种:
catch
{
throw; // 可捕获所有类型的异常
}
第四种:
catch(Exception ex)
{
MessageBox.Show(ex.Message);
throw new Exception("经过进一步包装的异常", ex); // 经过进一步包装的异常,第二个参数保存了原来的异常信息
}
推荐使用第一种用法

11、最小化应用程序的程序集代码(即EXE客户端程序集)。用类库来包含业务逻辑。

12、避免显式类型转换。使用as操作符防御性地进行转换类型:

Dog dog = new GermanShepherd();
GermanShepherd shepherd = dog as GermanShepherd;
if (shepherd != null)
{
...
}

13、调用委托前始终检查委托是否为空。

14、不要假定一种类型能支持某个接口。防御性地为接口查询是否支持该接口。

SomeType obj1;
IMyInterface obj2; obj2 = obj1 as IMyInterface;
if(obj2 != null)
{
obj2.Method1();
}
else
{
...
}

15、永远不要硬编码将呈现给用户的字符串,而是使用资源。

16、永远不要硬编码布署时可能修改的字符串,例如连接字符串。

17、用String.Empty代替"":

// 避免
string name = ""; //推荐
string name = String.Empty;

18、当频繁地使用一个字符串超过4次,使用StringBuilder,不要使用string。

19、当提供一个静态成员变量时,总是提供一个静态构造函数。

20、除非在switch语句中跳转,否则永远不要用goto语句。

21、不要在使用泛型的代码中对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;
}
}

22、不要在泛型接口中定义约束条件。接口级别的约束常常可以用强类型代替:

public class Customer
{...} // 避免
public interface IList<T> where T : Customer
{...}
// 建议
public interface ICustomerList : IList<Customer>

23、lock锁私有只读静态对象。不要使用lock (this)lock (typeof (MyType))lock ("myLock")等

C# 编码标准(二)的更多相关文章

  1. Java 字符编码(二)Java 中的编解码

    Java 字符编码(二)Java 中的编解码 java.nio.charset 包中提供了一套处理字符编码的工具类,主要有 Charset.CharsetDecoder.CharsetEncoder. ...

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

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

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

    C#编码标准--编码习惯 0.  书写程序时的大小写规则: a) 类:PascalCase表示法.如 MyClass b) 枚举值:PascalCase表示法.如 Colors.Red c) 枚举类型 ...

  4. 【JAVA编码】 JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换

    http://blog.csdn.net/qinysong/article/details/1179489 这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记 ...

  5. WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(二)实现IRequestChannel(2016-03-15 12:35)

    这是这个系列的第二篇,其他的文章请点击下列目录 WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(一)概要设计 WCF扩展之实现ZeroMQ绑定和protocolBuffer消息 ...

  6. javascript编码标准

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

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

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

  8. Java安全编码标准

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

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

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

随机推荐

  1. Django的session学习

    session的由来 cookie最大的问题就是键值对保存在客户端的浏览器上,我们看下session是如何保存的呢? 比如一个请求过来,数据是这样的{“username”:"zyb" ...

  2. 写一写关于python开发面试的常遇到的问题以及解答吧,持续更新——看心情

    1,什么是python中的魔术方法? 魔术方法是重载运算符的昵称,形式是__init__类似这样的前后双下滑线组成的,常用的__init__,__new__,__call__,__str__,__ge ...

  3. easyui datagrid 三层嵌套

    代码: function local(role,region,ip){ $("#roleList").datagrid({ // title:'服务器监控列表', height:( ...

  4. python中logging模块使用

    1.logging模块使用场景 在写程序的时候,尤其是大型的程序,在程序中加入日志系统是必不可少的,它能记录很多的信息.刚刚接触python的时候肯定都在用print来输出信息,这样是最简单的输出,正 ...

  5. Python爬虫项目--爬取自如网房源信息

    本次爬取自如网房源信息所用到的知识点: 1. requests get请求 2. lxml解析html 3. Xpath 4. MongoDB存储 正文 1.分析目标站点 1. url: http:/ ...

  6. JSON与GSON比较

    JSON: 是Android SDK官方的库,所以在开发移动端的工程时就必须使用JSON.进行数据的转换和处理 GSON: GSON适用于服务端,gson比json功能更加强大.比如在集合类的处理.自 ...

  7. 对于devexpress gridview 内插图加加进度条等的一点解读

    如上图,gategory 加了小图标, 其他行内还有计算器,大图片   进度条等 using System; using System.Drawing; using System.Collection ...

  8. DevExpress如何实现皮肤的添加及本地化

    DevExpress.XtraBars.Helpers.SkinHelper类允许您填充现有RibbonGalleryBarItem或任意菜单(PopupMenu或BarSubItem)项目对应的De ...

  9. Oracle_PL/SQL(2) 过程控制

    0.检索单行数据0.1使用标量变量接受数据例1: 7788declare v_ename emp.ename%type; v_sal emp.sal%type;begin select ename,s ...

  10. 安装composer,以及通过composer安装laravel

    1安装composer http://docs.phpcomposer.com/00-intro.html#Installation-Windows中选择windows安装 下载并且运行 Compos ...