当前位置: 首页 > 编程日记 > 正文

C#开发编码规范

C#开发编码规范

注记:
Pascal 大小写形式——所有单词第一个字母大写,其他字母小写。
Camel 大小写形式——除了第一个单词,所有单词第一个字母大写,其他字母小写。
类名使用Pascal大小写形式
public class HelloWorld
{
 …
}
方法使用Pascal大小写形式
public class HelloWorld
{
 void SayHello(string name)
 {
  …
 }
}
变量和方法参数使用Camel 大小写形式
public class HelloWorld
{
 int totalCount = 0;
 void SayHello(string name)
 {
  string fullMessage = "Hello " + name;
  …
 }
}
    不要使用匈牙利方法来命名变量。
以前,多数程序员喜欢把数据类型作为变量名的前缀而m_作为成员变量的前缀。例如:
string m_sName;
int nAge;
然而,这种方式在.NET编码规范中是不推荐的。所有变量都用Camel 大小写形式,而不是用数据类型和m_来作前缀。用有意义的,描述性的词语来命名变量。别用缩写。用name,address,salary等代替nam,addr,sal。别使用单个字母的变量象i,n,x 等。使用 index,temp等。用于循环迭代的变量例外:
for ( int i = 0; i < count; i++ )
{
 …
}
如果变量只用于迭代计数,没有在循环的其他地方出现,许多人还是喜欢用单个字母的变量(i) ,而不是另外取名。变量名中不使用下划线 (_) 。命名空间需按照标准的模式命名。文件名要和类名匹配,例如,对于类HelloWorld,相应的文件名应为helloworld.cs (或,helloworld.vb)

缩进和间隔
缩进用TAB。不用 SPACES。注释需和代码对齐。花括弧 ( {} ) 需和括号外的代码对齐。用一个空行来分开代码的逻辑分组。
 bool SayHello (string name)
 {
  string fullMessage = "Hello " + name;
  DateTime currentTime = DateTime.Now;
  string message = fullMessage + ",the time is : " + currentTime.ToShortTimeString();
  MessageBox.Show ( message );
  if ( … )
  {
   // Do something
   // …
   return false;
  }
  return true;
 }
             
这段代码看起来比上面的好:
 bool SayHello ( string name )
 {
  string fullMessage = "Hello " + name;
  DateTime currentTime = DateTime.Now;
    string message = fullMessage + ",the time is : " + currentTime.ToShortTimeString();
    MessageBox.Show ( message );
    if ( … )
  {
   // Do something
   // …
      return false;
  }
    return true;
 }
在一个类中,各个方法需用一空行,也只能是一行分开。花括弧需独立一行,而不象if,for 等可以跟括号在同一行。
好:
  if ( … )
  {
   // Do something
  }

不好:
  if ( … ) {
   // Do something
  }
在每个运算符和括号的前后都空一格。
好:
  if ( showResult == true )
  {
   for ( int i = 0; i < 10; i++ )
   {
    //
   }
  }
不好:
  if(showResult==true)
  {
   for(int i= 0;i<10;i++)
   {
    //
   }
  }

良好的编程习惯
遵从以下良好的习惯以写出好程序。
避免使用大文件。如果一个文件里的代码超过300~400行,必须考虑将代码分开到不同类中。避免写太长的方法。一个典型的方法代码在1~25行之间。如果一个方法发代码超过25行,应该考虑将其分解为不同的方法。方法名需能看出它作什么。别使用会引起误解的名字。如果名字一目了然,就无需用文档来解释方法的功能了。
好:
 void SavePhoneNumber ( string phoneNumber )
 {
  // Save the phone number.
 }
不好:
 // This method will save the phone number.
 void SaveData ( string phoneNumber )
 {
  // Save the phone number.
 }
一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。
好:
 // Save the address。
 SaveAddress (  address );
 
 // Send an email to the supervisor to inform that the address is updated.
 SendEmail ( address,email ); 
 
 void SaveAddress ( string address )
 {
  // Save the address.
  // …
 }
 void SendEmail ( string address,string email )
 {
  // Send an email to inform the supervisor that the address is changed.
  // …
 }
不好:
 // Save address and send an email to the supervisor to inform that the address is updated.
 SaveAddress ( address, email );
 void SaveAddress ( string address, string email )
 {
  // Job 1.
  // Save the address.
  // …
  // Job 2.
  // Send an email to inform the supervisor that the address is changed.
  // …
 }
使用C# 或 VB.NET的特有类型,而不是System命名空间中定义的别名类型。
好:
 int age;
 string name;
 object contactInfo;
不好:
 Int16 age;
 String name;
 Object contactInfo;
别在程序中使用固定数值,用常量代替。别用字符串常数,用资源文件。避免使用很多成员变量,声明局部变量,并传递给方法。不要在方法间共享成员变量,如果在几个方法间共享一个成员变量,那就很难知道是哪个方法在什么时候修改了它的值。必要时使用enum,别用数字或字符串来指示离散值。
好:
 enum MailType
 {
  Html,
  PlainText,
  Attachment
 }
 void SendMail (string message,MailType mailType)
 {
  switch ( mailType )
  {
   case MailType.Html:
    // Do something
    break;
   case MailType.PlainText:
    // Do something
    break;
   case MailType.Attachment:
    // Do something
    break;
   default:
    // Do something
    break;
  }
 }
不好:
 void SendMail (string message, string mailType)
 {
  switch ( mailType )
  {
   case "Html":
    // Do something
    break;
   case "PlainText":
    // Do something
    break;
   case "Attachment":
    // Do something
    break;
   default:
    // Do something
    break;
  }
 }
别把成员变量声明为 public或 protected。都声明为private 而使用 public/protected 的Properties。不在代码中使用具体的路径和驱动器名,使用相对路径,并使路径可编程。永远别设想你的代码是在“C:”盘运行。你不会知道,一些用户在网络或“Z:”盘运行程序。应用程序启动时作些“自检”并确保所需文件和附件在指定的位置。必要时检查数据库连接。出现任何问题给用户一个友好的提示。如果需要的配置文件找不到,应用程序需能自己创建使用默认值的一份。如果在配置文件中发现错误值,应用程序要抛出错误,给出提示消息告诉用户正确值。错误消息需能帮助用户解决问题。永远别用象“应用程序出错”,“发现一个错误”等错误消息。而应给出象“更新数据库失败,请确保登陆id和密码正确。” 的具体消息。显示错误消息时,除了说哪里错了,还应提示用户如何解决问题。不要用象“更新数据库失败。”这样的,要提示用户怎么做:“更新数据库失败,请确保登陆id和密码正确。”
显示给用户的消息要简短而友好。但要把所有可能的信息都记录下来,以助诊断问题。
 
注释
别每行代码,每个声明的变量都做注释。在需要的地方注释。可读性强的代码需要很少的注释,如果所有的变量和方法的命名都很有意义,会使代码可读性很强并无需太多注释。行数不多的注释会使代码看起来优雅。但如果代码不清晰,可读性差,那就糟糕。如果因为某种原因使用了复杂艰涩的原理,为程序配备良好的文档和重分的注释。对一个数值变量采用不是0,-1等的数值初始化,给出选择该值的理由。简言之,要写清晰,可读的代码以致无须什么注释就能理解。对注释做拼写检查,保证语法和标点符号的正确使用。

异常处理
不要“捕捉了异常却什么也不做”。如果隐藏了一个异常,你将永远不知道异常到底发生了没有。发生异常时,给出友好的消息给用户,但要精确记录错误的所有可能细节,包括发生的时间,和相关方法,类名等。只捕捉特定的异常,而不是一般的异常。
好:
 void ReadFromFile ( string fileName )
 {
  try
  {
   // read from file.
  }
  catch (FileIOException ex)
  {
   // log error.
   //  re-throw exception depending on your case.
   throw;
  }
 }
不好:
 void ReadFromFile ( string fileName )
 {
  try
  {
   // read from file.
  }
  catch (Exception ex)
  {
   // Catching general exception is bad… we will never know whether it
   // was a file error or some other error.
  
   // Here you are hiding an exception.
   // In this case no one will ever know that an exception happened.
   return ""; 
  }
 }
不必在所有方法中捕捉一般异常。不管它,让程序崩溃。这将帮助你在开发周期发现大多数的错误。你可以用应用程序级(线程级)错误处理器处理所有一般的异常。遇到“意外的一般性错误”时,此错误处理器应该捕捉异常,给用户提示消息,在应用程序关闭或用户选择“忽略并继续”之前记录错误信息。不必每个方法都用try-catch。当特定的异常可能发生时才使用。比如,当你写文件时,处理异常FileIOException。别写太大的 try-catch 模块。如果需要,为每个执行的任务编写单独的 try-catch 模块。这将帮你找出哪一段代码产生异常,并给用户发出特定的错误消息如果应用程序需要,可以编写自己的异常类。自定义异常不应从基类SystemException派生,而要继承于IApplicationException。

相关文章:

【原创】如何分析一个网站使用的服务器类型

如何知道一个网站使用的是什么类型的服务器呢&#xff1f;如其前端使用的是apache呢还是iis呢还是nginx呢还是其他呢&#xff1f;中间件使用的是什么呢&#xff1f;有以下几种方法&#xff1a; 首先说原理&#xff1a;http协议的头部提供了丰富的信息告诉我们一些信息&#xff…

想学Python?那这套教程再适合你不过了!!

如果你想问最近这些年什么编程语言最值得学习&#xff0c;我相信很多人都会告诉你是Python&#xff01;所以不仅是开发小白&#xff0c;甚至很多开发老手&#xff0c;也都开始学习Python&#xff0c;作为辅助第二语言来提高自己的职场竞争力。不过结合我最近这些年Python的学习…

Java compiler level does not match the version of the installed Java project facet.

2019独角兽企业重金招聘Python工程师标准>>> 解决方式&#xff1a;右击项目点击>>选择对应的版本就好、&#xff01; 转载于:https://my.oschina.net/liusonghuang/blog/1512115

【C#小知识】C#中一些易混淆概念总结(三)---------结构,GC,静态成员,静态类...

目录&#xff1a; 【C#小知识】C#中一些易混淆概念总结 【C#小知识】C#中一些易混淆概念总结&#xff08;二&#xff09; ---------------------------------------分割线---------------------------------------------- 一&#xff0c;C#中结构 在C#中可以使用struct关键字来…

C#精髓【月儿原创】第一讲 使用垃圾回收器

说明&#xff1a;准备出一个系列&#xff0c;所谓精髓讲C#语言要点。这个系列没有先后顺序&#xff0c;不过尽量做到精。可能会不断增删整理&#xff0c;本系列最原始出处是csdn博客,谢谢关注。 C#精髓 第一讲 使用垃圾回收器 作者&#xff1a;清清月儿 主页&#xff1a;h…

5GtoB即将迎来规模商用,如何共创行业新价值?

4月14日&#xff0c;在华为公司第18届全球分析师大会期间&#xff0c;华为携手运营商代表、产业界代表举办了“5G激发行业新价值”论坛&#xff0c;与行业分析师、金融分析师共同探讨对5GtoB产业未来的展望、创新解决方案以及最佳业务实践。 5G发展进入快车道&#xff0c;融合…

$.ajax上传文件或者上传图片

2019独角兽企业重金招聘Python工程师标准>>> ###FormData 想得到一个FormData对象就必须new一个FormData对象&#xff0c;然后使用append()方法向该对象里添加键值对 var formdata new FormData() //包含用户选择文件的文件流 formdata.append("file",ev…

BMP图形文件分析类(c#)

1using System; 2using JJBase.FILE; 3namespace JJBase.Image 4{ 5 /**//// <summary> 6 /// BMP 的摘要说明。 7 /// </summary> 8 public class BMP 9 { 10 11 public BMP() 12 { 13 // 14 …

gsoap 学习 1-由wsdl文件生成h头文件

开始前先看一下用户向导吧 http://www.cs.fsu.edu/~engelen/soap.html 中左侧点击Documentation 英语水平确实有限,有些内容可能说的不准确,敬请参考向导中原文,以免误导 向导 1.1节中提供了gSoap开发包的下载地址http://sourceforge.net/projects/gsoap2 下载最新gSoap程序包解…

微软每年豪砸安全研发 10 亿美元,聊聊背后的技术密码

从无序中寻找踪迹&#xff0c;从眼前事探索未来。正值 IT 黄金十年新开端&#xff0c; CSDN 欲以中立技术社区专业、客观的角度&#xff0c;深度探讨中国前沿 IT 技术演进&#xff0c;现在推出年度重磅企划——「拟合」&#xff0c;通过对话企业高管大咖&#xff0c;跟踪报道企…

phpstudy多站点配置好后index of/ 列表无法出现的解决

打开配置文件vhost-conf&#xff0c;看到图中画黄色线部分。把新配置的站点中的options后面加上 Indexes 就行了。 转载于:https://www.cnblogs.com/wubuwei/p/7388700.html

【OSX】build AOSP 2.3.7时的build error解决

原始的error log&#xff1a; 1 2 PLATFORM_VERSION_CODENAMEREL3 PLATFORM_VERSION2.3.74 TARGET_PRODUCTgeneric5 TARGET_BUILD_VARIANTeng6 TARGET_SIMULATOR7 TARGET_BUILD_TYPErelease8 TARGET_BUILD_APPS9 TARGET_ARCHarm 10 HOST_ARCHx86 11 HOST_OSdarwin 12 HOST_BUIL…

undefined reference to 'pthread_create'

pthread 库不是 Linux 系统默认的库&#xff0c;连接时需要使用静态库 libpthread.a&#xff0c;所以在使用pthread_create()创建线程&#xff0c;以及调用 pthread_atfork()函数建立fork处理程序时&#xff0c;需要链接该库。源文件&#xff0c;不要忘了加上头文件#include<…

瞄准自然语言处理,百度与鹏城实验室共建实验室

4月16日&#xff0c;百度与鹏城“自然语言处理联合实验室”签约暨揭牌仪式在鹏城实验室举行。 中国工程院院士、鹏城实验室主任高文出席仪式并致辞&#xff0c;鹏城实验室人工智能研究中心主任李革教授和百度集团首席技术官王海峰代表双方介绍了联合实验室前期筹备情况并签署协…

PostgreSQL SQL 语言:并行查询

本文档为PostgreSQL 9.6.0文档&#xff0c;本转载已得到原译者彭煜玮授权。 1. 并行查询如何工作 当优化器判断对于某一个特定的查询&#xff0c;并行查询是最快的执行策略时&#xff0c;优化器将创建一个查询计划。该计划包括一个 Gather 节点。下面是一个简单的例子&#xff…

常用的linux的命令行操作

2019独角兽企业重金招聘Python工程师标准>>> 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT …

Python 极简实现 IoU

来源 | 简明AI头图 | 下载于视觉中国出品 | AI 科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;IOU中文名叫交并比&#xff0c;见名知意就是交集与并集的比值。是在目标检测中常用的算法。IoU原理如上图所示&#xff0c;就是计算上面阴影部分与下面阴影部分的比值。…

静态页htm传参数

//从转向过来的URL中截取参数 开始function SplitUrl(key){var fstrkey;var getstr;var urldocument.URL.toString();urlurl.toLowerCase();//转为小写var locurl.indexOf(fstr);if(loc>0){getstrurl.substring(locfstr.length,url.length);return getstr;}else{return &quo…

vue router 入门笔记

vue router 入门笔记 tips&#xff1a; components优先级大于component&#xff0c;即当一个route对象里同时配置了component和components时component视为无效即使route对象有name属性&#xff0c;也要配置一个path属性。name属性只是配对用的&#xff0c;path是要直接打到url上…

用C#的Raw Socket实现网络封包监视

<script language"javascript" src"/ad/js/edu_left_300-300.js" type"text/javascript"></script> 谈起socket编程&#xff0c;大家也许会想起QQ和IE&#xff0c;没错。还有许多网络工具如P2P、NetMeeting等在应用层实现的应用程序…

人工智能是否能开启人类世界新纪元?

想必许多人都不止一次地幻想过&#xff0c;当人工智能发展到极限时&#xff0c;它将为我们的生活带来多少触手可及的便捷&#xff0c;或是意想不到的惊喜呢&#xff1f;试想一下我们身处英剧《黑镜》的世界中&#xff0c;人类的生活里充斥着人工智能对社交行为的各种评分机制&a…

1月国内操作系统市场:Windows XP份额高达60.84%

IDC评述网&#xff08;idcps.com&#xff09;02月21日报道&#xff1a;据CNZZ数据&#xff0c;在国内操作系统市场上&#xff0c;2014年1月份&#xff0c;微软Windows系统依旧称霸市场&#xff0c;份额为90.63%&#xff0c;环比去年末下滑0.57%。对于市场份额下滑一事&#xff…

17.08.17

控制文件 丢失部分控制文件&#xff1a; SQL> select * from v$controlfile; $ >/u01/app/oracle/oradata/orcl/control01.ctl SQL> select * from v$tablespace; 报错 SQL> alter system checkpoint; 报错 $ vi /u01/app/oracle/diag/rd…

用C#实现基于TCP协议的网络通讯

TCP协议是一个基本的网络协议&#xff0c;基本上所有的网络服务都是基于TCP协议的&#xff0c;如HTTP,FTP等等&#xff0c;所以要了解网络编程就必须了解基于TCP协议的编程。然而TCP协议是一个庞杂的体系&#xff0c;要彻底的弄清楚它的实现不是一天两天的功夫&#xff0c;所幸…

Java NIO系列教程(二) Channel

为什么80%的码农都做不了架构师&#xff1f;>>> Java NIO的通道类似流&#xff0c;但又有些不同&#xff1a; 既可以从通道中读取数据&#xff0c;又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer&#xff0…

百度CTO王海峰博鳌解读AI“融合创新”,算力算法数据发挥综合作用

4月18至21日&#xff0c;博鳌亚洲论坛2021年年会在海南博鳌举行。19日下午&#xff0c;百度CTO王海峰受邀参加本届博鳌年会“后疫情时代的人工智能”为主题的圆桌论坛。与公钥加密技术之父、图灵奖得主惠特菲尔德迪菲&#xff0c;阿斯利康公司董事长雷夫约翰森等多位专家和企业…

Java开发工具(Eclipse中内容辅助键的使用)

* A:Alt/ 起提示作用* B:mainalt/,sysoalt/,给出其他提示* C:补充输出语句,选中需要输出的部分,alt/选择最后一项即可* C:定义自己的alt / * windows--perference-Java-Editor-Templates--New * A:新建 ctrl n(new)* B:格式化 ctrlshiftf(format)* C:导入包 ctrlshifto *…

常用的css3的新属性

2019独角兽企业重金招聘Python工程师标准>>> 作为前端开发人员&#xff0c;如果你还不知道或还没有接触过CSS3&#xff0c;那么你真的OUT了&#xff01;就像蒸汽机的发明标志工业革命的开始一样&#xff0c;CSS3和HTML5的出现&#xff0c;将会带来WEB前端开发以及互…

高效分页存储过程

存储过程与页面调用如下&#xff1a; CREATE PROCEDURE search_sptblName varchar(255), -- 表名 strGetFields varchar(1000) *, -- 需要返回的列 fldName varchar(255), -- 排序的字段名 PageSize int 10, -- 页尺寸 PageIndex int , -- 页码 doCount bit 0, -- 返回记录…

2020年企业业务营收同比增长23.0%,华为的数字化转型实践之道

近日&#xff0c;在华为分析师大会期间&#xff0c;华为举办“共创行业新价值”主题峰会&#xff0c;与来自全球的400多名行业分析师、财经分析师、各行业意见领袖及媒体现场参会&#xff0c;分享了对行业趋势的洞察&#xff0c;解决方案在具体行业场景中的实践与探索&#xff…