C# 编码标准(一)
一直想写一个自己用的代码标准,经过一段时间的优秀开源源码的观察和看其他人写的标准,感觉好的代码给人感觉就是舒服,也非常重要。所以把它们记录归纳总结,以备以后忘记,另外平时写代码的时候可以拿来参考下。下面的示例主要以Microsoft的代码为准。
命名约定
- PascalCasing
PascalCasing 每一个单词第一个字母大写,其余字母均小写。例如:FileAccess,ArraySegment等。
除了参数、变量、常量外,所有命名空间名称、类、函数、接口、属性、事件、枚举等名称的命名,使用 Pascal 风格。
camelCasing
camelCasing 第一个单词首字母小写,其余单词首字母大写。例如:propertyName,filePath等。
参数与变量的命名使用camelCasing.
SCREAMING_CAPS
SCREAMING_CAPS每个单词的所有字母都大写,单词与单词之间用"_"连接,该风格目前在c#中只用于const常量。
如:public const string DEFAULT_PAGE = "default.aspx";
私有变量的命名
Private 的私有变量使用下划线"_"或"m_"+camelCasing的大小写规则,以便快速确认该变量的作用域。
如: private int _userId;
private int m_userId;
一、命名约定与风格
1、类型名与方法名用pascal命名规范:
public class StringReader : TextReader
{
public override String ReadToEnd()
{
...
}
}
2、局部变量与方法参数使用camel命名规范:
internal static String InternalCopy(String sourceFileName, String destFileName, bool checkHost)
{
string fullSourceFileName = Path.GetFullPathInternal(sourceFileName);
...
}
3、接口名加前缀I:
public interface IComparer
{
// Compares two objects. An implementation of this method must return a
// value less than zero if x is less than y, zero if x is equal to y, or a
// value greater than zero if x is greater than y.
int Compare(Object x, Object y);
}
4、私有成员变量前加前缀m_或_:
unsafe internal class PathHelper
{
// maximum size, max be greater than max path if contains escape sequence
private int m_capacity;
// current length (next character position)
private int m_length;
// max path, may be less than capacity
private int _maxPath;
....
}
5、常量使用pascal或全部大写表示:
private const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
private const int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;
private const int FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000;
const string RsaKeyValue = XmlSignatureConstantsNamespace + "RSAKeyValue";
6、自定义特性类后加后缀Attribute:
[AttributeUsage(AttributeTargets.Struct | AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true)]
[ComVisible(true)]
public sealed class DebuggerVisualizerAttribute: Attribute
7、自定义异常类加后缀Exception:
[Serializable]
public class ArgumentException : SystemException, ISerializable
8、方法命名使用“动词/对象”对,如 GetHashCode(...),
public unsafe static Array CreateInstance(Type elementType, int length)
9、有返回值的方法名中需要描述此返回值,如GetObjectState()。
10、使用描述性变量名。
a.避免使用单个字母作为变量名,如i或t,用index或temp来代替。
b.避免对公共成员或受保护成员使用匈牙利标记法。
c.避免使用缩写(如把number写成num)。
11、不要混淆使用c#中的预定义类型与CLR中的类型:
如object 与Object, string与String,int与Int32
12、对于泛型,使用该类型的首字母代替,当使用.NET的Type类型时才使用Type作为后缀:
public class Dictionary<K,V>
{...}
13、使用有意见的命名空间名称,如产品名或公司名。
14、避免使用完全限定类型名。用using语句代替。
15、把所有的framework命名空间一起放在最上面,把自定义放在最下面,第三方命名空间放中间:
using System;
using System.Collections;
using System.Collections.Generic;
using ThreadPartyLibrary;
using MyCompanyName;
16、采用委托推断,不要显示实例化委托:
delegate void SomeDelegate();
public void SomeMethod()
{...}
SomeDelegate someDelegate = SomeMethod;
17、使用Tab来进行缩进。
18、所有的成员变量都必须在顶部声明,用一行把它们与属性或方法隔开。
19、定义局部变量时,尽量使它靠近第一次使用它的地方。
20、文件名能够反应它使用的类。
21、使用左大括号({)时,换一行。
22、if下面即使只有一行代码,也要加{}包围起来:
23、为每一个命名空间建一个目录。如 MyProject.TestSuite.TestTier 使用MyProject/TestSuite/TestTier 作为路径。
24、当一行中的代码太长时,建议使用下面的方式进行断行:
- Break after a comma----逗号后面
- Break after an operator----操作符后面
- Prefer higher-level breaks to lower-level breaks----
- Align the new line with the beginning of the expression at the same level on the previous line.
如 longMethodCall(expr1, expr2,
expr3, expr4, expr5);
Examples of breaking an arithmetic expression:
PREFER:
var = a * b / (c - g + f) +
* z;
var = a * b / (c - g + f) +
* z;
BAD STYLE – AVOID:
var = a * b / (c - g +
f) + * z;
25、声明变量时就进行初始化。
26、从 Stream 继承的 Framework 类型以 Stream 结尾:
如FileStream, MemoryStream等。
27、当不理解一个方法时,可以把它们分解为更小部分,并为它们取恰当名称。
C# 编码标准(一)的更多相关文章
- C#编码标准--编码习惯
C#编码标准--编码习惯 0. 书写程序时的大小写规则: a) 类:PascalCase表示法.如 MyClass b) 枚举值:PascalCase表示法.如 Colors.Red c) 枚举类型 ...
- javascript编码标准
前面的话 编码标准是有争议的.几乎每个人都有自己的标准,但对标准应该是什么样的,则似乎很少能达成共识.但编码标准意味着,通过共同语言和一致的结构,把开发人员从无意义的工作中解放出来.允许开发人员把创新 ...
- VP9 vs H.265——下一代视频编码标准的王道之争
目前下一代主流的视频编码标准有 ITU-T VCEG 推出来的 H.265 和 Google 推出 VP9 . H.265 在 H.264 的基础上保留其中的部分技术,并对相关技术加以改进研发而成.新 ...
- Java安全编码标准
Java安全编码标准 具体参考Rules 输入验证和数据净化(IDS)规则风险评估概要 IDS00-J净化穿越受信边界的非受信数据 IDS01-J验证前标准化字符串 IDS02-J在验证之前标准化路径 ...
- 视频基础知识:浅谈视频会议中H.264编码标准的技术发展
浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...
- C# 编码标准(二)
先八卦一下,昨天写了C# 编码标准(一),得到了@h82258652的补充,感到非常欣慰,一是感觉他的观点扩展了我的视野,丰富了我的看法,所以更坚定了我继续写博客的想法,由于是五笔打字,经常不写东西, ...
- 防微杜渐——读《C安全编码标准》
防微杜渐——读<C安全编码标准> 首先这本书的名字是非常洋气的——<C安全编码标准>.然而映入眼帘的却不仅仅是冷冰冰的编码,还有那一套非常严谨的风险评估标准和问题处理方法.对于 ...
- 音视频处理之H264编码标准20170906
一. H264基础概念 1.名词解释 场和帧 : 视频的一场或一帧可用来产生一个编码图像.在电视中,为减少大面积闪烁现象,把一帧分成两个隔行的场. 片: 每个图象中,若干 ...
- jQuery的编码标准和最佳实践
不知道在哪里看到了这篇关于jQuery编码的文章,挺实用的,恰好最近在研究jQuery的基础知识,今天打开收藏夹来翻译一下,原文的英语不难,但是内容很实用,可能有大神已经翻译过了,大家看精华就行了. ...
- Android编码标准
只是练习是很难找工作那会儿在,简历基本上都是赶出去石沉大海,因为有项目开发没有实践经验.没有牛逼的背景.更重要的是,没有真才实学,虽然我在大学时读的是计算机专业,它可以被认为是一个技术教育.但--你知 ...
随机推荐
- 【Linux 线程】线程同步《二》
1.读写锁 与互斥量类似,但读写锁允许更高的并行性.其特性为:写独占,读共享. 读写锁状态: 一把读写锁具备三种状态: (1)读模式下加锁状态 (读锁) (2)写模式下加锁状态 (写锁) (3)不加锁 ...
- go语言中net包tcp socket的使用
一.通过socket我们模拟请求网易 package main; import ( "net" "log" "io/ioutil" &quo ...
- oracle数据库冷恢复
场 景:客户的服务器是在虚拟机上,结果虚拟机的服务器的硬盘坏掉了.硬盘换掉后,系统成功恢复出来,但是登录虚拟机后,数据库无法启动. 解决方案:通过冷恢复将数据库还原.在自己的电脑上搭建一个 ...
- 梦殇 chapter six
如行尸走肉般的坐在教室,看著书上密密麻麻的字,心却久久不能平静. 自己已经不再是当初那个懵懂,无知的小女孩了.仰望天空45度,让眼泪流回眼睛. 是该告别彷徨,告别懵懂的年纪了. 早些年许下的诺言,如今 ...
- UISwitch开关控件属性介绍以及获取开关状态并做出响应
(1)UISwitch的大小也是固定的,不随我们frame设置的大小改变:也是裁剪成圆角的,设置背景就露马脚发现背景是矩形. (2)UISwitch的背景图片设置无效,即我们只能设置颜色,不能用图片当 ...
- MCS-51与8086指令系统比较
- 201621123008 《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...
- django模板语言和过滤
一:模板组成 HTML代码 + 逻辑控制代码 逻辑代码组成格式: 使用大括号来引用变量, {{ var_name }} 二: Template和Context对象 //进入该的django的项目环境 ...
- div同时使用两个class
<p class="con hide">...</p> 1:使用空格分割 2:这个段落将同时应用这两个 class 制定的规则 3:如果二者有重叠,后者覆盖 ...
- VMware Workstation 15 pro keys
永久激活密钥UG5J2-0ME12-M89WY-NPWXX-WQH88 GA590-86Y05-4806Y-X4PEE-ZV8E0 YA18K-0WY8P-H85DY-L4NZG-X7RAD UA5D ...