自己总结的C#编码规范--3.特定场景下的命名最佳实践
特定场景下的命名最佳实践
命名空间
- 要使用PascalCasing,并用点号来分隔名字空间中的各个部分。
如Microsof.Office.PowerPoint
- 要用公司名作为命名空间的前缀,这样就可以避免与另外一家公司使用相同的名字。
- 要用稳定的,与版本无关的产品名称作为命名空间的第二层
- 不要使用公司的组织架构来决定命名空间的层次结构,因为内部组织结构经常改变。
- 不要用相同的名字来命名命名空间和该空间内的类型。
例如,不要先将命名空间命名为Debug,然后又在该空间中提供Debug类。大部分编译器包括VS要求用户在这样的类型前加上完整的限定符。
要让接口的名字以字母I开头
如IComponet,IDisposable 大家一看就知道是接口。
同时要确保如果一个类是一个接口的标准实现,那么这个类和接口应该只差一个"I"前缀。
派生类的末尾使用基类名称
例如,从 Stream 继承的 Framework 类型以 Stream 结尾,从 Exception 继承的类型以 Exception 结尾。
泛型类型参数的命名
- 使用描述性的名字来命名泛型类型参数,并且在前面加上T前缀
如下面都是很好的命名
public delegate TOutput Converter<TInput, TOutput>(TInput from);
- 如果只有一个类型参数,可以只用一个字母T来表示泛型
public class Nullable<T>
public class List<T>
- 如果泛型参数有约束,那么需要在泛型类型参数名中需要显示出该约束
public interface ISessionChannel<TSession> where TSession:ISession
枚举类型的命名
- 要用单数名词而不是复数命名枚举类型,如要用ConsoleColor而不是ConsoleColors
public enum ConsoleColor
{
Red,
Yellow,
Blue
}
- 不要给枚举类型加"Enum"、"Flag"等后缀。
ColorEnum,ColorFlag都不好,因为本身就是枚举,再加上就是没有意义的重复 。
要用动词和动词短语命名方法
属性的命名
- 要用名词、名词短语或形容词来命名属性
- 要用描述集合中具体内容的短语的复数形式来命名属性集合,而不要用短语的单数形式加"List"、"Array"或"Collection"后缀
class BinaryTree
{
//Good Naming
public NodeCollection Nodes { get; set; }
//Bad Naming
public NodeCollection NodesCollection { get; set; }
- 要用肯定性的短语命名布尔属性。最好在前面选择性的加入"Is"、"Can"、"Has"等前缀。
CanSeek比CantSeek和Seekable都更准确和容易理解。
事件的命名
- 要用动词或动词短语命名事件
如: Clicked、Painting、DroppedDown 等等
- 要用现在进行时(ing)和过去式(ed)来赋予事件发生之前和之后的概念。而不是使用Before和After.
如窗口关闭前发生的close事件应该命名为Closing,而在窗口关闭之后发生的应该命名为Closed.
字段的命名
- 禁止使用实例的公有字段和受保护字段,请使用属性代替。
Tips:在VisualStudio中输入"prop"可快速创建外部可修改的属性,输入"propg"可快速创建不允许外部修改的属性。如:
//propg
public int NodesCount { get; private set; }
//prop
public List<BinaryNode> Nodes { get; set; }
- 一般只使用静态字段
- 要使用名词、名词短语或形容词命名字段
- 不要给字段加前缀如"g_"、"s_"来表示静态字段。因为字段和属性是非常相似的,所以要遵循相同的命名规范。
自己总结的C#编码规范--3.特定场景下的命名最佳实践的更多相关文章
- 《C+编程规范 101条规则、准则与最佳实践》笔记
<C+编程规范 101条规则.准则与最佳实践> 0.不要拘泥于小节(了解哪些东西不应该标准化) * 与组织内现有编码规范一致即可 * 包括但不限于: - 缩进 - 行长度 - 命名规范 - ...
- Java基础学习总结(92)——Java编码规范之排版、注释及命名
为使开发人员养成良好的开发习惯,编写可读性强.易维护的程序,结合以往资料,现整理Java编码规范,将之作为开发人员的参照依据. 一.排版 1.相对独立的程序块之间必须加空行 下列情况应该使用一个空行: ...
- 特定场景下Ajax技术的使用
ajax介绍 jax技术包含了几种技术:javascript.xml.css.xstl.dom.xhtml和XMLHttpRequest七种技术,所以ajax就像是粘合剂把七种技术整合到一起,从而发挥 ...
- 特定场景下SQL的优化
1.大表的数据修改最好分批处理. 1000万行的记录表中删除更新100万行记录,一次只删除或更新5000行数据.每批处理完成后,暂停几秒中,进行同步处理. 2.如何修改大表的表结构. 对表的列的字段类 ...
- 特定场景下的PLC 远程控制和数据读取
最近有位博友提出了一种应用场景,根据工作中实际遇到的类似的产品应用场景,记录下自己的解决方案. 场景: 需要在云端控制和采集各个站点的PLC数据.各个站点是分散的,每个站点有公网访问能力,但是分散站点 ...
- 这套C#编码规范写不错
自己总结的C#编码规范--1.命名约定篇:http://www.cnblogs.com/luzhihua55/p/CodingConventions1.html 自己总结的C#编码规范--2.命名选择 ...
- 自己总结的C#编码规范--7.文档下载 & 总结
今天终于把这一系列的编码规范写完了,这个编码规范算上前面阅读相关书籍,前前后后总共花了一个月的时间,也算是个人的呕心沥血之作了. 本来也没打算把这个系列写的这么长,但是在写的过程中自己搜了相关的网上资 ...
- 自己总结的C#编码规范--前言&目录
最近在为公司编写c#编码规范,以前对这方面研究不多,只是觉得代码能够出自己的意思就可以了. 我参考了以下资料 C# Coding Conventions NET设计规范约定惯用法与模式(第2版) 编写 ...
- 【原】JAVA SE编码规范
/* * 编码规范: * 1.所有的命名遵循"见名知意"的原则 * 2.所有的命名不允许使用汉字或拼音 * 3.Java的工程命名建议使用小写,比如:oa.crm.cms... * ...
随机推荐
- LeetCode(119):杨辉三角 II
Easy! 题目描述: 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] 进阶: ...
- 【深度学习】吴恩达网易公开课练习(class1 week3)
知识点梳理 python工具使用: sklearn: 数据挖掘,数据分析工具,内置logistic回归 matplotlib: 做图工具,可绘制等高线等 绘制散点图: plt.scatter(X[0, ...
- Django框架之Form组件
一.初探Form组件 在介绍Form组件之前,让大家先看看它强大的功能吧!Go... 下面我们来看看代码吧! 1.创建Form类 from django.forms import Form from ...
- Kali linux Nessus &Cracking Password
1 .Nessus漏洞网站测试(真正体会到什么是专业版和社区版的区别,要技术就不光要勤恳的态度,严谨的思维.还有矢志不渝的志气,还必须要求砸钱,所以狠狠的赚钱才是硬道理),我的半个社区版的很多扫描模块 ...
- cf里的一些简单组合数题
cf711D 成环的和不成环的要单独计算,环用双联通做的QAQ /* 所有情况-成环的情况 */ #include<bits/stdc++.h> using namespace std; ...
- python进行进制转换
# 10进制转为2进制 print(bin(10)) # 结果:0b1010 # 2进制转为10进制 print(int("1001", 2)) # 结果:9 # 10进制转为16 ...
- MySQL5.7版本及以上,改密码sql语句;grant创建用户已经密码
mysql> update mysql.user set authentication_string = password('*****') where user = 'root'; gran ...
- centos7.5上一步步部署jumpserver
1.基础环境:centos7.5:关闭防火墙和selinux 2.修改字符集,否则可能会报input/output error 的问题,因为日志里打印了中文 [root@xzw ~]# localed ...
- python面向对象三大特性-多态
import abc #利用abc模块实现抽象类 class All_file(metaclass=abc.ABCMeta): all_type='file' @abc.abstractmethod ...
- 步步为营-93-MVC+EF简单实例
1:创建MVC项目 2:添加EF数据(这里选择DataBaseFirst模式) 3:添加控制器 3.1.1 创建列表页面 3.1.2 html页面 @using MvcApplication1 @{ ...