出色Java程序员的编制程序风格,编制程序规范

目录

图灵程序设计丛书:精通C#(第6版)是C#领域久负知名的经典文章,深切周到地执教了C#编制程序语言和。NET平台的大旨内容,并组成大气示范剖析相关概念。全书分为八部分:C#和。NET平台、C#中央编制程序结构、C#面向对象编制程序、高级C#编制程序结构、用。NET程序集编制程序、。NET基础类库、WPF和ASP。NETWebForms。第⑥版是对第肆版的一发立异和全面,内容包括了早先进的。NET编程技术和技艺,并规范展现出C#编制程序语言的流行变化和。NET4。5Framework的新特征。

来自《The Elements of Java
Style》-《Java编制程序风格》一书,值得一读的书本,会让你在细节上节省比比皆是光阴,合营之间越来越开心!

  • 大旨尺度
  • 类设计指南
  • 质量成员陈设指南
  • 别的设计指南
  • 可维护性指南
  • 命名指南
  • 脾气指南
  • 框架指南
  • 文书档案指南
  • 布局指南
  • 有关链接

《图灵程序设计丛书:精晓C#(第6版)》由微软C#MVPAndrewTroelsen编写,第⑤版更加针对C#5。0和。NET4。5拓展了精心入微的修订,是各层次。NET开发职员的必读之作。

好处不多说了,可是有多少个尺码如下:

C#编制程序规范


    图灵程序设计丛书:精晓C#
目录:

1.维持原来风格

  Version 2.0
目录

C# 编制程序指南

先是局地 C#与.NET平台
第1章
.NET之道
1.1
初识.NET平台
1.2
.NET平台构造块(CLLAND、CTS和CLS)简介
1.2.1
基础类库的职能
11.2.3
托管代码与非托管代码
1.3
其他协助.NET的编制程序语言
1.4
.NET程序集大概浏览
1.4.1
CIL的作用
1.4.2
.NET类型元数据的效益
1.4.3
程序集清单的法力
1.5
CTS
1.5.1
CTS类类型
1.5.2
CTS接口类型
1.5.3
CTS结构类型
1.5.4
CTS枚举类型
1.5.5
CTS委托项目
1.5.6
CTS类型成员
1.5.7
内建的CTS数据类型
1.6
CLS
1.7
CLR
1.8
次第集/命名空间/类型的差别
1.8.1
Microsoft根命名空间的效益
1.8.2
以编制程序格局访问命名空间
1.8.3
引用外部程序集
1.9
应用ildasm.exe探索程序集
1.9.1
查看CIL代码
1.9.2
翻看类型元数据
1.9.3
查看程序集元数据(即清单)
1.10
.NET的阳台无关性
1.11
Windows 8应用程序简介
1.11.1
构建Windows
8应用程序
1.11.2
.NET在Windows
8中的作用
1.12
小结

2.坚称最小惊奇原则

第一章 概述

近些年在 Github
上看见了1个人民代表大会拿创制一个库房:美高梅开户网址,CSharpCodingGuidelines,打开以往看了一晃
readme.md 相关描述,感觉应该很不利,于是就 clone
到地方拜读一下,那里列一些团结的笔记,方便日后回看。

第2章 构建C#应用程序
2.1
.NET Framework 4.5 SDK的作用
2.2
用csc.exe构建C#应用程序
2.2.1
点名输入输出目的
2.2.2
引用外部程序集
2.2.3
引用三个外表程序集
2.2.4
编写翻译四个源文件
2.2.5
使用C#响应文件
2.3
利用Notepad++构建.NET应用程序
2.4
选择SharpDevelop营造.NET应用程序
2.5
使用Visual C#
Express塑造.NET应用程序
2.6
使用Visual
Studio构建.NET应用程序
2.6.1
Visual Studio的特殊效用
2.6.2
使用New
Project对话框指向.NET
Framework
2.6.3
杀鸡取蛋方案能源管理器
2.6.4
Class View工具
2.6.5
Object Browser工具
2.6.6
合龙对代码重构的协助
2.6.7
代码扩充和环绕技术
2.6.8
可视化Class
Designer
2.6.9
集成的.NET Framework 4.5
SDK文档系统
2.7
小结

3.率先次就做对

正式制定规则

着力原则

  • Astonishment
    原则:你的代码应该尽只怕做到让每一人都能通晓。任何人都有写出让机器认识的代码,然而并不是各种人都能写出令人认识的代码;
  • Kiss 原则:类似 Python 之禅 里面说的那么,简单胜于复杂;
  • YAGNI
    原则:代码尽量能做到可扩张,但请不要过度重构,因为你不能够预言今后;
  • DCR-VY 原则:不要再度造轮子,除非你有时光照旧您造的轮子会比别人的绝妙;
  • 面向对象编制程序原则:继承、封装、多态、抽象;

其次片段 C#大旨编程结构
第3章
C#主干编制程序结构
3.1
贰个简便的C#程序
3.1.1
Main方法的其他情势
3.1.2
点名应用程序错误代码
3.1.3
拍卖命令行参数
3.1.4
使用Visual
Studio钦点命令行参数
3.2
有意思的题外话:System.Environment类的别的成员
3.3
System.Console类
3.3.1
动用Console类进行着力的输入和出口
3.3.2
格式化控制台出口
3.3.3
格式化数值数据
3.3.4
在控制台应用程序外格式化数值数据
3.4
系统数据类型和对应的C#关键字
3.4.1
变量表明和初步化
3.4.2
内建数据类型与new操作符
3.4.3
数量类型类的层次结构
3.4.4
数值数据类型的分子
3.4.5
System.Boolean的成员
3.4.6
System.Char的成员
3.4.7
从字符串数据中剖析数值
3.4.8
System.DateTime和System.TimeSpan
3.4.9
System.Numerics.dll程序集
3.5
应用字符串数据
3.5.1
主干的字符串操作
3.5.2
字符串拼接
3.5.3
转义字符
3.5.4
概念逐字字符串
3.5.5
字符串和相等性
3.5.6
字符串是不可变的
3.5.7
System.Text.StringBuilder类型
3.6
窄化和宽化数据类型转换
3.6.1
checked关键字
3.6.2
设定项目级其他溢出检查和测试
3.6.3
unchecked关键字
3.7
隐式类型本地变量
3.7.1
隐式类型变量的限定
3.7.2
隐式类型数据是强类型数据
3.7.3
隐式类型本地变量的用途
3.8
C#迭代结构
3.8.1
for循环
3.8.2
foreach循环
3.8.3
while和do/while循环结构
3.9
规范结构和关系/相等操作符
3.9.1
if/else语句
3.9.2
事关/相等操作符
3.9.3
逻辑操作符
3.9.4
switch语句
3.10
小结

4.记录全部非规范作为

术语定义

类设计指南

  • 3个类/接口应该只有叁个用处,要符 合单一任务 原则;
  • 只开创重回有用对象的构造函数,当构造函数的参数超过 3
    的话,你就应该考虑你的类设计是还是不是过于臃肿;
  • 接口应该短小精悍,其定义要简明清晰地传达出其有着的一言一动;
  • 若是一种表现有多种落到实处,请考虑使用接口而不是基类;
  • 尽心尽力选取接口将类举行互动解耦;
  • 防止采取静态类;
  • 不用使用 new 关键字来禁止编写翻译器呈现相关警告;

public class Book
{
    public virtual void Print()
    {
        Console.WriteLine("Printing Book");
    }
}

public class PocketBook : Book
{
    public new void Print()
    {
        Console.WriteLine("Printing PocketBook");
    }
}

class Program
{
    static void Main(string[] args)
    {
        PocketBook pocketBook = new PocketBook();
        pocketBook.Print();

        ((Book)pocketBook).Print();

        Console.ReadKey();
    }
}

在上述代码段中,我们成立2个基类 book,并定义了三个 Print()
方法,接着大家创制2个子类 PocketBook,并通过 new
关键字来重写基类方法。在品种复杂的意况下,使用那种艺术将造成大家不能够精确预测是子类调用还是父类调用,使代码复杂度提高。

  • 有道是能够将派生类当作基类对象来拍卖;
  • 决不引用基类的派生类;
  • 幸免暴光一个对象重视的任何对象;
  • 防止双向正视;
  • 类应该有状态和作为;
  • 类应该维护个中间景况的一致性;

第4章 C#着力编制程序结构
4.1
措施和参数修饰符
4.1.1
默许的参数字传送递行为
4.1.2
out修饰符
4.1.3
ref修饰符
4.1.4
params修饰符
4.1.5
概念可选参数
4.1.6
应用命名参数调用方法
4.1.7
分子重载
4.2
C#数组
4.2.1
C#数组初步化语法
4.2.2
隐式类型本地数组
4.2.3
定义object数组
4.2.4
选取多维数组
4.2.5
数组作为参数(和再次回到值)
4.2.6
System.Array基类
4.3
枚举类型
4.3.1
支配枚举的底层存款和储蓄
4.3.2
注解枚举变量
4.3.3
System.Enum类型
4.3.4
动态获取枚举的名称/值对
4.4
布局类型
4.5
值类型和引用类型
4.5.1
值类型、引用类型和赋值操作符
4.5.2
包罗引用类型的值类型
4.5.3
按值传递引用类型
4.5.4
按引用传递引用类型
4.5.5
值类型和引用类型:最后的细节
4.6
C#可空类型
4.6.1
应用可空类型
4.6.2
??操作符
4.7
小结

格式规范:

Pascal 大小写

品质成员布署指南

  • 同意按私下顺序设置属性;
  • 应用办法而不是性质;
  • 毫不使用相互排挤的本性;
  • 个性、方法依旧地点方法只应该做一件事情;
  • 无须通过静态成员公开有气象的靶子;
  • 用 IEnumerable 或许 ICollection 来替代具体的汇集对象作为重返值;
  • 假设属性、参数和重临值是字符串也许聚众类型的话,则永远不应该为空;
  • 尽量地定义具体的参数;
  • 设想使用特定域的值类型而不是基元;

其三片段 C#面向对象编制程序
第5章封装
5.1
C#类类型
5.2
构造函数
5.2.1
默许构造函数的法力
5.2.2
概念自定义的构造函数
5.2.3
再谈默许构造函数
5.3
this关键字的职能
5.3.1
行使this实行串联构造函数调用
5.3.2
着眼构造函数流程
5.3.3
再谈可选参数
5.4
static关键字
5.4.1
概念静态数据
5.4.2
概念静态方法
5.4.3
概念静态构造函数
5.4.4
概念静态类
5.5
定义OOP的支柱
5.5.1
包装的功能
5.5.2
几次三番的作用
5.5.3
多态的职能
5.6
C#做客修饰符
5.6.1
暗中认可的造访修饰符
5.6.2
做客修饰符和嵌套类型
5.7
第3个支柱:C#的包裹服务
5.7.1
动用守旧的访问方法和改动章程执行封装
5.7.2
使用.NET属性举行打包
5.7.3
利用类的性质
5.7.4
只读和只写属性
5.7.5
静态属性
5.8
自行属性
5.8.1
与机动属性交互
5.8.2
至于机关属性和暗中同意值
5.9
目的初步化语法
5.9.1
行使开头化语法调用自定义构造函数
5.9.2
初步化内部类型
5.10
常量数据
5.10.1
只读字段
5.10.2
静态只读字段
5.11
分部类型
5.12
小结

1.缩进嵌套的代码:在各种代码块和嵌套中参加缩进,缩进代码,抓好可读性。这个地方包含【类定义,内部类定义,方法定义,静态块,for循环语句,if-else语句,try、catch和finally块,匿名内部类,while语句,do-while语句】

Camel 大小写

别的布置指南

  • 抛出特别而不是回到某种类型的气象值;
  • 提供完整而有意义的极度新闻;
  • 抛出格外的最现实的13分;
  • 不要通过 try – catch 形式隐藏卓殊;
  • 正确处理异步代码中的格外;
  • 调用事件委托前先判断是不是为空;

event EventHandler<string> Notify;
protected virtual void OnNotify(string args)
{
    Notify?.Invoke(this, args);
}
  • 选用受保证的虚方法来触发每一种事件;
  • 设想添加属性别变化化事件;
  • 当接触事件时要保证 sender != nulll;
  • 就算正好的话,请考虑使用泛型约束;

class SomeClass
{
}

/// <summary>
/// 不推荐
/// </summary>
class MyClass1
{
    void SomeMethod<T>(T t)
    {
        object temp = t;
        SomeClass obj = (SomeClass)temp;
    }
}

/// <summary>
/// 推荐
/// </summary>
class MyClass2
{
    void SomeMethod<T>(T t) where T :SomeClass
    {
        SomeClass obj = t;
    }
}
  • 在回去 LINQ 表明式之前计算它的结果;
  • 只要不是必须,不要采取 thisbase 关键字;

第四章继承和多态
6.1
持续的着力机制
6.1.1
钦命既有类的父类
6.1.2
八个基类
6.1.3
sealed关键字
6.2
回顾Visual
Studio类关系图
6.3
OOP的第叁个支柱:继承
6.3.1
选用base关键字控制基类的创导
6.3.2
家门的机密:protected关键字
6.3.3
日增密封类
6.4
出色Java程序员的编制程序风格,编制程序规范。饱含/委托编制程序
6.5
OOP的第多个支柱:C#的多态援救
6.5.1
virtual和override关键字
6.5.2
使用Visual Studio
IDE重写虚方法
6.5.3
密封虚成员
6.5.4
抽象类
6.5.5
营造多态接口
6.5.6
成员投影
6.6
基类/派生类的转换规则
6.6.1
C#的as关键字
6.6.2
C#的is关键字
6.7
极品父类:System.Object
6.7.1
重写System.Object.ToString
6.7.2
重写System.Object.Equals
6.7.3
重写System.Object.GetHashCode
6.7.4
测试修改后的Person类
6.7.5
System.Object的静态成员
6.8
小结

2.断开相当长的语句:第叁,倘诺带有了逗号,那么在每3个逗号前面都另起一行,把逗号后边的种种表明式都和逗号前边的表明式的率先个假名对齐。第贰,应该在优先级最低的运算符此前断行。

文本命名协会

可维护性指南

  • 措施内部的代码段尽量不要跨越 7 行;
  • 担保全数成员个人,类的类型暗中同意为为 internal sealed
  • 制止重复标准;
  • 在其蕴涵的命名空间内命名程序集;
  • 将源文件命名为它所蕴藏的花色;
  • 将源文件的内容限制为一种档次;
  • 将不相同的逻辑函数放到同多少个部分类中;
  • 在运用一个项目时,使用 using
    关键字导入必要的命名空间,而不是项目标完好空间标识;
  • 毫无选拔魔法数;
  • 唯有当类型综上可得时才使用 var 关键字;
  • 概念变量时尽只怕地开头化;
  • 在互相独立的代码段中定义临时变量;
  • 若对象有成团须求起初化的话在进展对象起初化的同时实行联谊开首化;
  • 并非显式举办 bool 值的可比;
  • 制止嵌套循环;
  • 在使用
    ifelsedowhileforforeachcase
    的同时利用 {}
  • switch case 代码段中添加 default 逻辑;
  • 在具有的 ifelse if 后再添加 else;
  • 制止采纳多个重返值;
  • 考虑选取简易的条件语句代替 if else
  • 封装属性、方法或局部函数中的复杂表达式;
  • 再安妥的处境下品尝重载方法;
  • 应用可选参数来替代重载;
  • 幸免采纳命名参数;
  • 防止定义超越三个参数的署名;
  • 防止函数签名为布尔类型;
  • 绝不将参数作为目前变量使用;
  • 将格局作为操作;
  • 不要诠释代码;

第八章结构化非凡处理
7.1
错误、bug与异常
7.2
.NET相当处理的效应
7.2.1
.NET极度处理的四要素
7.2.2
System.Exception基类
7.3
最简便易行的例子
7.3.1
抓住普通的格外
7.3.2
破获分外
7.4
布局不行的情景
7.4.1
TargetSite属性
7.4.2
StackTrace属性
7.4.3
HelpLink属性
7.4.4
Data属性
7.5
系统级卓殊
7.6
使用程序级相当
7.6.1
创设自定义特出,第1有些
7.6.2
营造自定义杰出,第壹局地
7.6.3
创设自定义格外,第3有的
7.7
拍卖多少个可怜
7.7.1
通用的catch语句
7.7.2
双重吸引那三个
7.7.3
里头极度
7.7.4
finally块
7.8
什么人在吸引什么格外
7.9
未处理极度的后果
7.10
使用Visual
Studio调节和测试未处理的尤其
7.11
小结

3.接纳空白:关键字和左括号之间,右括号和紧随其后的第二字,除了”.”之外的运算符与其前后的表明式之间用空格隔断。每种逻辑上单独的方法和代码段之间,定义类恐怕接口的成员之内,各样类和接口之间应该进入空白行。

1.3.1文书命名

取名指南

  • 并非在变量、参数和花色成员中富含数字;
  • 绝不在字段添加前缀;
  • 不要使用缩写;
  • 成员、参数和变量定义要基于它们代表的意义;
  • 应用名词、名词短语恐怕形容词来定义类型;
  • 运用描述性名称命名泛型参数;
  • 在类成员中永不再一次定义和类相同的名称;
  • 成员定义可参考 .Net Framework 的概念方式;
  • 防止选取恐怕被误会的段名称或字段;
  • 正确定义属性;
  • 在命名方式或部分函数时利用谓词或谓词对象;
  • 动用名称、层、谓词和效率表明命名空间;
  • 应用动词或动词前缀来定义事件;
  • 使用 ingend 后缀来表明事件预处理和殡葬事件;
  • 使用 on 前缀来定义事件处理程序;
  • 使用 Async 或者 TaskAsync 来标识异步方法;

第8章接口
8.1
接口类型
8.2
概念自定义接口
8.3
落到实处接口
8.4
在对象级别调用接口成员
8.4.1
获得接口引用:as关键字
8.4.2
获取接口引用:is关键字
8.5
接口作为参数
8.6
接口作为重返值
8.7
接口类型数组
8.8
使用Visual
Studio完结接口
8.9
显式接口达成
8.10
规划接口层次结构
8.11
营造可枚举类型(IEnumerable和IEnumerator)
8.11.1
用yield关键字构建迭代器方法
8.11.2
营造命名迭代器
8.12
营造可克隆的目的(ICloneable)
8.13
营造可正如的对象(IComparable)
8.13.1
点名多少个排序依次
8.13.2
自定义属性、自定义排序类型
8.14
小结

4.绝不一贯利用Tab控制符:差别环境对Tab控制符的解说也是例外的。

1.3.2文书注释

本性指南

  • 使用 Any() 判断 IEnumerable 是或不是为空 ;
  • 仅对低密集型活动使用异步;
  • 对于 CPU密集型使用 Task.Run
  • 幸免同时将 async/awaitTask.Wait 混合使用;
  • 避免 async/await 在单线程环境下出现死锁;

第肆片段 高级C#编制程序结构
第8章集合与泛型
9.1
集合类的胸臆
9.1.1
System.Collections命名空间
9.1.2
System.Collections.特略ized命名空间
9.2
非泛型集合的题材
9.2.1
属性难题
9.2.2
类型安全难点
9.2.3
初识泛型集合
9.3
泛型类型参数的功效
9.3.1
为泛型类/结构内定项目参数
9.3.2
为泛型成员钦定项目参数
9.3.3
为泛型接口钦赐项目参数
9.4
System.Collections.Generic命名空间
9.4.1
会师伊始化语法
9.4.2
使用List类
9.4.3
使用Stack类
9.4.4
使用Queue类
9.4.5
使用SortedSet类
9.5
System.Collections.ObjectModel命名空间
9.6
成立自定义泛型方法
9.7
创设自定义泛型结构和类
9.8
花色参数的自律
9.8.1
采取where关键字的演示
9.8.2
操作符约束的欠缺
9.9
小结

命名约定:

第2章   代码外观

框架指南

  • 使用 C# 类型 外号而不是系量举办显式调用;
  • 毫不硬编码;统命名空间中的类型;
  • 应用最高警戒级别编写翻译代码;
  • 对于简易的表达式制止使用 LINQ
  • 动用 lambda 表明式来取代匿名函数;
  • 只用在应用动态目的时才使用 dynamic 关键字;
  • 协助异步/等待职务延续;

第10章委托、事件和Lambda表达式
10.1
.NET委托项目
10.1.1
在C#中定义委托类型
10.1.2
System.MulticastDelegate与System.Delegate基类
10.2
最简便的嘱托示例
10.3
选择委托发送对象情状布告
10.3.1
帮忙多路广播
10.3.2
从委托的调用列表中移除成员
10.3.3
方法组转换语法
10.4
泛型委托
10.5
C#事件
10.5.1
event关键字
10.5.2
揭秘事件的绝密面纱
10.5.3
监听传入的风浪
10.5.4
使用Visual
Studio简化事件注册
10.5.5
始建自定义的轩然大波参数
10.5.6
泛型EventHandler委托
10.6
C#匿超级模特式
10.7
Lambda表达式
10.7.1
剖析Lambda表达式
10.7.2
采纳多个语句处理参数
10.7.3
含有四个(或零个)参数的Lambda表达式
10.7.4
行使Lambda表明式重新编排Car伊芙nts示例
10.8
小结

1.称谓应当具备实际意义

2.1      列宽

文书档案指南

  • 接纳美式意国语来编排相关文书档案;
  • 文档中的代码部分要确定保障完整性;
  • 与别的开发职员一起编写 xml 文书档案;
  • 编辑 MSDN 风格的技艺术文化书档案;
  • 防止内联注释;
  • 注释值应该用来诠释复杂的算法或钻探;
  • 永不采纳注释来跟踪要在其后形成的办事;

第11章 高级C#语言特征
11.1
索引器方法
11.1.1
选择字符串值索引对象
11.1.2
重载索引器方法
11.1.3
多维的索引器
11.1.4
在接口类型上定义索引器
11.2
操作符重载
11.2.1
重载二元操作符
11.2.2
+=与-=操作符
11.2.3
重载一元操作符
11.2.4
重载相等操作符
11.2.5
重载比较操作符
11.2.6
操作符重载的终极思考
11.3
自定义类型转换
11.3.1
回想:数值转换
11.3.2
回顾:相关的类类型间的更换
11.3.3
创造自定义转换例程
11.3.4
Square类型的别的显式转换
11.3.5
概念隐式转换例程
11.4
推而广之方法
11.4.1
概念扩张方法
11.4.2
在实例层次上调用扩大方法
11.4.3
导入扩张方法
11.4.4
推而广之方法的智能感知
11.4.5
壮大达成了钦点接口的品种
11.5
匿名类型
11.5.1
定义匿名类型
11.5.2
匿名类型的里边表示方法
11.5.3
方法ToString和GetHashCode的实现
11.5.4
匿名类型的也正是语义
11.5.5
富含匿名类型的匿名类型
11.6
指针类型
11.6.1
unsafe关键字
11.6.2
*和 操作符
11.6.3
不安全(与安全)交流作用
11.6.4
通过指针访问字段
11.6.5
stackalloc关键字
11.6.6
动用fixed关键字固定类型
11.6.7
sizeof关键字
11.7
小结

2.选择人们耳熟能详的称谓

2.2      换行

布局指南

  • 运用正规布局;
  • 传闻公式须要开始展览命名空间的约束;
  • 将成员置于定义卓越的相继中;
  • 小心运用 #region
  • 适度采纳表现完美的分子;

第12章 LINQ to Object
12.1
LINQ特有的编制程序结构
12.1.1
隐式类型本地变量
12.1.2
对象和聚合起初化语法
12.1.3
Lambda表达式
12.1.4
壮大方法
12.1.5
匿名类型
12.2
LINQ的作用
12.2.1
LINQ表明式是强类型的
12.2.2
核心LINQ程序集
12.3
将LINQ查询利用于原始数组
12.3.1
再一次,不使用LINQ
12.3.2
反射LINQ结果集
12.3.3
LINQ和隐式类型本地变量
12.3.4
LINQ和壮大方法
12.3.5
延迟执行的成效
12.3.6
马上执行的功用
12.4
回来LINQ查询的结果
12.5
将LINQ查询利用到集结对象
12.5.1
访问包罗的子对象
12.5.2
将LINQ查询利用于非泛型集合
12.5.3
行使OfType筛选数据
12.6
C# LINQ查询操作符
12.6.1
着力的选用语法
12.6.2
获取数据子集
12.6.3
阴影新数据类型
12.6.4
行使Enumerable获取总数
12.6.5
反转结果集
12.6.6
对表明式进行排序
12.6.7
维恩图工具
12.6.8
移除重复
12.6.9
LINQ聚合操作
12.7
LINQ查询语句的个中表示
12.7.1
用查询操作符建立查询表明式(复习)
12.7.2
运用Enumerable类型和Lambda表明式来树立查询表明式
12.7.3
选用Enumerable类型和匿有名的模特式来树立查询表明式
12.7.4
用Enumerable类型和原有委托成立查询说明式
12.8
小结

3.小心翼翼运用过长的名字,能够使用简明通用的缩写

2.3      缩进

连带链接

  • Code Complete: A Praccal Handbook of Soware Construcon (Steve
    McConnel)
  • The Art of Agile Development (James
    Shore)
  • Applying Domain-Driven Design and Paerns: With Examples in C# and
    .NET (Jimmy
    Nilsson)
  • Jeremy D. Miller’s
    Blog
  • LINQ Framework Design
    Guidelines
  • Best Pracces for c#
    async/await

第叁3章对象的生命周期
13.1
类、对象和引用
13.2
目的生命周期的底子
13.2.1
CIL的new指令
13.2.2
将目的引用设置为空
13.3
应用程序根的效益
13.4
指标的代
13.5
.NET 1.0至.NET
3.5的出现垃圾回收
13.6
.NET 4.0及后续版本
13.7
System.GC类型
13.8
营造可告竣对象
13.8.1
重写System.Object.Finalize
13.8.2
利落进程的底细
13.9
创设可处以对象
13.10
创设可竣事类型和可处以项目
13.11
推迟对象实例化
13.12
小结

4.尽量保留元音字母

2.4      空行

    …

5.缩写词的率先个假名大写

2.5      空格

                        《精通c#(第④版)》【PDF】下载链接:

6.决不使用大小写来区分的名字

2.6      括号 –
()

愈多书单和推荐介绍电子书请关心:

包命名:

2.7      花括号 –
{}

1.用你所在公司的域名的倒序小写格局作为包的根限定词

其三章 程序注释

2.应用单独的小写词作者为每种包的根名

3.4      注释概述

3.仅当新旧版本二进制包容的时候,其包能够选取同一的名字,不然,请使用新名字

3.2      文书档案型注释

体系命名:

3.3      类c注释

1.类和接口名中的每一种单词的首先个假名大写

3.4      单行注释

类命名:

3.5      注释标签

1.用名词命名类

第四章 申明

2.持有成组相关属性,静态服务只怕常量的类名字使用复数情势

4.1     每行表明数

接口命名:

4.2     初始化

1.用名词大概形容词命名接口

4.3     位置

主意命名:

4.4     类和接口的扬言

1.方法名中的第几个单词小写,其后每一个单词的第3个字母大写

4.5     字段的扬言

2.用动词命超级模特式

第6章 命名规范

3.服从JavaBean中命名属性访问函数方法:set,get,is

5.1     命名概述

变量命名:

5.2     大小写规则

1.变量命中的第②个单词小写,其后的每一种单词的第二个字母大写

5.3     缩写

2.用名词命名变量

5.4     命名空间

3.成团引用名要用复数方式

5.5     类

4.为不主要的一时半刻变量简历并应用一套标准名字

5.6     接口

字段命名:

5.7     属性
(Attribute)

1.运用this字段变量能够分别开部分变量

5.8     枚举
(Enum)

参数命名:

5.9     参数

1.构造函数也许”set”方法给字段分配参数赋值,参数名应当和字段名相同

5.10       方法

常量命名:

5.11       属性
(property)

1.常量的各样单词均大写,单词之间采纳下划线连接

5.12       事件

文书档案约定:

5.13       常量
(const)

1.为运用和保卫安全您的代码的人编写文书档案

5.14       字段

2.诠释和代码要一起

5.15       静态字段

3.运用主动的话里有话,省略无用的词语

5.16       集合

注明类型:

5.17       措词

1.用文书档案注释来叙述编程接口

第六章 语句

2.用规范注释格式隐藏代码而毋庸删除它们

6.1     每行二个讲话

3.用单行注释解释完毕细节

6.2     复合语句

文书档案注释:

6.3     return 语句

1.在编辑代码前描述编制程序接口

6.4     if、 if-else、if
else-if 语句

2.为公用,受保险,包,私有成员建立文书档案

6.4   for、foreach 语句

3.为各种包编写总括和概述

6.5     while 语句

4.为包的每一个应用程序或组编写概述

[6.7.      do

评释风格:

  • while 语句]()

1.对全数文书档案注释使用统一的格式和集体结构

[6.8.      switch

2.要害字,标识符和常量应放置<code>…</code>标签中

  • case 语句]()

3.将代码放入<pre>…</pre>标签中

6.9.    try – catch 语句

4.在标识符第三回面世的时候用{@link}标签

6.10.     using 块语句

5.为Javadoc标签简历并利用一套固定的相继

6.11.     goto 语句

6.行使第几人称叙述的款型

第八章    控件命名规则

7.编写独立的概述

7.1     命超情势

8.省略概述中动作和劳务的主语

7.2      首要控件名简写对照表

9.省略事物概述中的对象和动词

第八章    其他

10.利用this而不是the来指代当前类中的实例

8.1     表达式

11.方法名大概构造函数名不需圆括号,除非您想非凡二个特殊的签署

8.2     类型转换

表明内容:

附录一: 匈牙利(Hungary)命名法

1.每一种类、接口、字段和方法都编写制定概述

 

2.完完全全描述每一种方法的签订契约

3.带有示例

 

4.为停放、前置、不变条件编写文书档案

第一章 概述

 

5.为已知的后天不足和不足编写文书档案

专业制定规范

 1 方便代码的调换和掩护。

   2 不影响编码的功用,不与群众习惯争持。

   3 使代码更美丽、阅读更便宜。

   4 使代码的逻辑更清楚、更易于驾驭。

 

6.为共同语法编写文书档案

术语定义

中间注释:

Pascal 大小写

      将标识符的首字母和前边连接的各类单词的首字母都大写。能够对三字符或更加多字符的标识符使用帕斯Carl 大小写。例如:

               BackColor

1.仅增进有助于理解你的代码的中间注释

Camel 大小写

标识符的首字母小写,而各种后边连接的单词的首字母都大写。例如:

                backColor

 

2.描绘代码为何如此做,而不是在做怎么着

文件命名组织

3.幸免采用行尾注释

1.3.1文书命名

1 文件名坚守帕斯Carl命名法,无出奇情形,扩充名小写。

2 使用统一而又通用的公文增加名: C# 类  .cs

4.用行尾注释解释局地变量评释

1.3.2文本注释

  1 在种种文件头必须含有以下注释表达

            /*—————————————————————-

            //
Copyright (C) 二〇〇二 东软公司有限公司

            // 版权全数。

            //

            // 文件名:

            // 文件成效描述:

            //

            //

            // 创立标识:

            //

            // 修改标识:

            // 修改描述:

            //

            // 修改标识:

            // 修改描述:

//—————————————————————-*/

 

文件成效描述只需简述,具体详情在类的诠释中讲述。

始建标识和改动标识由成立或涂改人口的拼音或英文名加日期组成。如:

 

    李轶20040408

 

一天内有多个修改的只需做三个在诠释表达中做1个改动标识就够了。

在具备的代码修改处加上修改标识的笺注。

 

5.确立并行使一套关键词来标识尚未消除的题材

第2章   代码外观

 

6.在嵌套程度高的控制结构中标记出嵌套截止地方

2.1   列宽

    代码列宽控制在110字符左右。

 

7.要是八个case标记之间一贯不break语句,就在中间投入“fall-through”注释

2.2   换行

      当表明式超出或将要超越规定的列宽,听从以下规则举行换行

          ① 、在逗号后换行。

          贰 、 在操作符前换行。

          三 、规则1先行于规则2。

     当以上规则会招致代码混乱的时候自个儿使用更灵活的换行规则。

 

             

8.标记空语句

2.3   缩进

     缩进应该是每行3个Tab(四个空格),不要在代码中使用Tab字符。

  Visual
Studio.Net设置:工具->选项->文本编辑器->C#->制表符->插入空格

 

编制程序约定:

2.4   空行

空行是为着将逻辑上相关联的代码分块,以便升高代码的可阅读性。

    在偏下情况下行使七个空行

    ① 、接口和类的定义之间。

    二 、枚举和类的概念之间。

    ③ 、类与类的概念之间。       

     

    在偏下情形下使用2个空行

         ① 、方法与格局、属性与质量之间。

         贰 、方法中变量评释与话语之间。

         ③ 、方法与方法之间。

         肆 、方法中分歧的逻辑块之间。

        ⑤ 、方法中的重临语句与其他的讲话之间。

         陆 、属性与办法、属性与字段、方法与字段之间。

         柒 、注释与它注释的语句间不空行,但与其他的口舌间空一行。

 

1.将代表基础数据类型的类证明为final类型

2.5   空格

在偏下情形中要利用到空格

        ① 、 关键字和左括符 “(”
应该用空格隔断。如

 

           while (true)   

 

           注意在方法名和左括符 “(” 之间并非选用空格,那样有助于辨认代码中的方法调用与根本字。

          

贰 、  八个参数用逗号隔开分离,每一种逗号后都应加一个空格。

叁 、  除了 . 之外,全体的二元操作符都应用空格与它们的操作数隔开。一元操作符、++及–与操作    数间不须求空格。如

 

                     a  +=  c  +  d;

                   a  =  (a  +  b)   /   (c  *  d);

                while  (d++  =  s++)

                {

                    n++;

                }

                PrintSize(“size
is “  +  size  +  “\n”);

 

肆 、语句中的表明式之间用空格隔离。如

 

       for  (expr1;  expr2;  expr3)

 

2.经过当地品种和其他实际项目建立具体项目

2.6   括号 – ()

      ① 、 左括号“(” 不妨靠首要字,中间用2个空格隔断。

      贰 、左括号“(”  与办法名以内并非添加任何空格。

      ③ 、没有要求的话不要在回到语句中运用()。如

  

        if
(condition)

 

            Array.Remove(1)

 

            return 1 

 

3.定义小的类和小的法门

2.7   花括号 – {}

       一 、 左花括号 “{”
放于重点字或方法名的下一行并与之对齐。如

 

             if
(condition)

             {

             }

 

             public
int Add(int x, int y)

             {

             }

 

                           ② 、左花括号 “{” 要与相应的右花括号 “}”对齐。

       三 、常常境况下左花括号 “{”单独成行,不与别的语句并列一行。

       4、if、while、do语句后自然要运用{},即便{}号中为空或唯有一条语句。如

 

             if
(somevalue == 1)

             {

                 somevalue
= 2;

             }

 

伍 、 右花括号 “}” 后建议加1个诠释以便于方便的找到与之对应的 {。如

 

               while  (1)

               {

                   if  (valid)

                   {

                   }
// if valid

                   else

                   {

                   }
// not valid

                }
// end forever

 

4.定义子类,以便任何利用超类的地方都得以利用子类

其三章 程序注释

5.使全数字段私有

3.4   注释概述

① 、修改代码时,总是使代码周围的注释保持最新。

② 、在各种例程的起初,提供规范的表明样本以提醒例程的用处、借使和界定很有协助。注释样本应该是解释它干吗存在和能够做哪些的不难介绍.

③ 、防止在代码行的尾声添加注释;行尾注释使代码更难阅读。然而在眉批变量表明时,行尾注释是相当的;在那种气象下,将享有行尾注释在公共制表位处对齐。

4 、幸免混乱的注释,如一整行星号。而是应当利用空白将注释同代码分开。

5 、防止在块注释的方圆加上印刷框。那样看起来大概非常美丽,不过困难爱戴。

6 、在安插发表以前,移除全部权且或毫无干系的评释,以制止在后来的爱戴工作中爆发杂乱。

7 、如若必要用注释来诠释复杂的代码节,请检查此代码以鲜明是或不是应当重写它。尽一切大概不注释难以通晓的代码,而相应重写它。即便一般不应当为了使代码更简短以方便人们使用而牺牲品质,但必须维持品质和可维护性之间的平衡。

8 、在编写制定注释时选用完全的语句。注释应该表西晋码,而不该增添多义性。

9 、在编写代码时就注释,因为未来很只怕没有时间这么做。其它,如果有时机复查已编写制定的代码,在今日看来很扎眼的事物六周随后恐怕就不明确了。

10 、防止多余的或不伏贴的注释,如幽默的不主要的备注。

11、使用注释来分解代码的意向。它们不应作为代码的联合翻译。

1② 、注释代码中不十一分眼看的别的内容。

13 、为了制止难点屡屡出现,对不当修复和化解格局代码总是利用注释,尤其是在集体环境中。

14 、对由循环和逻辑分支组成的代码应用注释。那些是支援源代码读者的要害方面。

15 、在任何应用程序中,使用具有同等的标点和布局的会见样式来布局注释。

16 、用空白将注释同注释分隔符分开。在没有颜色提醒的动静下查看注释时,那样做会使注释很引人侧目且便于被找到。

17 、在有着的代码修改处加上修改标识的注释。

18 、为了是层次显明,在关闭的右花括号后注释该闭合所对应的起源。

    namespace
Langchao.Procument.Web

{

} // namespace Langchao.Procument.Web

6.选拔多态来替代instanceof

3.2   文书档案型注释

 该类注释选取.Net已定义好的Xml标签来标记,在注解接口、类、方法、属性、字段都应当使用该类注释,以便代码完结后平素扭转代码文书档案,让别人更好的刺探代码的落实和接口。如

 

///<summary>MyMethod
is a method in the MyClass class.

///<para>Here’s how
you could make a second paragraph in a description.

///<see
cref=”System.Console.WriteLine”/>

///for information about
output statements.

///</para>

            ///<seealso
cref=”MyClass.Main”/>

            ///</summary>

   public static void
MyMethod(int Int1)

   {

           }

 

花色安全:

3.3   类c注释

      该类注释用于

           1 不再动用的代码。

           2 一时半刻测试屏蔽某个代码。

       用法

         /*

[修改标识]

[修改原因]

. . . (the
source code )

*/

 

 

1.以java.lang.Object包装通用类,提供静态类型检查

3.4   单行注释

      该类注释用于

1 方法内的代码注释。如变量的扬言、代码或代码段的解释。注释示例:

 

          //

// 注释语句

          //

         private
int number;

 

         // 注释语句

         private
int number;

 

       

    

          2 方式内变量的宣示或花括号后的注明, 注释示例:

 

               if ( 1 ==
1)    // always true

               {   

                  statement;

                 }
// always true

 

2.以类的格局部封闭疗法装枚举类型

3.5   注释标签

    

标签

用法

作用

<c>

c>text</c>

 

text 希望将其指示为代码的文本。

为您提供了一种将说明中的文本标记为代码的方法。使用 <code> 将多行指示为代码

<para>

<para>content</para>

content段落文本。

用于诸如 <remarks> 或 <returns> 等标记内,使您得以将结构添加到文本中。

<param>

<param name=’name‘>description</param>

name 为方法参数名。将此名称用单引号括起来 (‘ ‘)。

应当用于方法声明的注释中,以描述方法的一个参数。

<paramref>

 

<paramref name="name"/>

 

name

要引用的参数名。将此名称用双引号括起来 (" ")。

<paramref> 标记为您提供了一种指示词为参数的方法。可以处理 XML 文件,从而用某种独特的方法格式化该参数。

<see>

<see cref="member"/>

 

cref = "member" 对可以通过当前编译环境进行调用的成员或字段的引用。编译器检查到给定代码元素存在后,将 member 传递给输出XML 中的元素名。必须将 member 括在双引号(" ") 中。

使您得以从文本内指定链接。使用 <seealso> 指示希望在“请参阅”一节中出现的文本。

<seealso>

<seealso cref="member"/>

 

cref = "member" 对可以通过当前编译环境进行调用的成员或字段的引用。编译器检查到给定代码元素存在后,将 member 传递给输出XML 中的元素名。必须将 member 括在双引号(" ") 中

使您得以指定希望在“请参阅”一节中出现的文本。使用 <see> 从文本

<example>

<example>description</example>

 

description

代码示例的说明。

使用 <example> 标记可以指定使用方法或其他库成员的示例。一般情况下,这将涉及到 <code> 标记的使用。

<code>

<code>content</code>

 

content 为希望将其标记为代码的文本。

 

记为您提供了一种将多行指示为代码的方法。使用 <c>指示应将说明中的文本标记为代码

<summary>

<summary>description</summary>

 

此处description 为对象的摘要。

应当用于描述类型成员。使用 <remarks> 以提供有关类型本身的信息。

<exception>

<exceptioncref="member">description</exception>

cref = "member" 对可从当前编译环境中获取的异常的引用。编译器检查到给定异常存在后,将 member 转换为输出 XML 中的规范化元素名。必须将 member 括在双引号 (" ") 中。

description 说明。

<exception> 标记使您可以指定类能够引发的异常。

<include>

<include file=’filename‘ path=’tagpath[@name="id"]’ />

filename 包含文档的文件名。该文件名可用路径加以限定。将 filename 括在单引号中 (‘ ‘)。

Tagpath:filename 中指向标记名的标记路径。将此路径括在单引号中 (‘ ‘)。

name 注释前边的标记中的名称说明符;名称具有一个 id

id

位于注释之前的标记的 id。将此 id 括在双引号中 (" ")。

<include> 标记使您得以引用描述源代码中类型和成员的另一文件中的注释。这是除了将文档注释直接置于源代码文件中之外的另一种可选方法。

<include> 标记使用 XML XPath 语法。有关自定义 <include> 使用的方法,请参阅 XPath 文档。

<list>

<list type="bullet" | "number" | "table">

   <listheader>

      <term>term</term>

     <description>description</description>

   </listheader>

   <item>

      <term>term</term>

     <description>description</description>

   </item>

</list>

 

term  定义的项,该项将在 text 中定义。

 

description  目符号列表或编号列表中的项或者 term 的定义。

<listheader> 块用于定义表或定义列表中的标题行。定义表时,只需为标题中的项提供一个项。

列表中的每一项用 <item> 块指定。创建定义列表时,既需要指定 term 也需要指定 text。但是,对于表、项目符号列表或编号列表,只需为 text 提供一个项。

列表或表所拥有的 <item> 块数可以根据需要而定。

<permission>

<permissioncref="member">description</permission>

 

cref = "member" 对可以通过当前编译环境进行调用的成员或字段的引用。编译器检查到给定代码元素存在后,将 member 转换为输出XML 中的规范化元素名。必须将 member 括在双引号 (" ") 中。

 

description  成员的访问的说明。

<permission> 标记使您得以将成员的访问记入文档。System.Security.PermissionSet 使您得以指定对成员的访问。

<remarks>

<remarks>description</remarks>

 

description 成员的说明。

<remarks> 标记是可以指定有关类或其他类型的概述信息的位置。<summary> 是可以描述该类型的成员的位置。

<returns>

<returns>description</returns>

 

description 返回值的说明。

<returns> 标记应当用于方法声明的注释,以描述返回值。

<value>

<value>property-description</value>

 

property-description 属性的说明。

<value> 标记使您得以描述属性。请注意,当在 Visual Studio .NET 开发环境中通过代码向导添加属性时,它将会为新属性添加 <summary> 标记。然后,应该手动添加 <value> 标记以描述该属性所表示的值。

 

 

 

 

 

3.尽量选取泛型

第四章 申明

说话和表明式:

4.1   每行注解数

一行只提议作多少个声称,并按字母顺序排列。如

 

          int
level;   //推荐

          int
size;    //推荐

          int x,
y;    //不推荐

 

1.用分外的主意替换重复的、复杂的表明式

4.2   初始化

      提议在变量评释时就对其做早先化。       

 

2.选拔块语句代替控制流结构的表明式

4.3   位置

      变量建议放权块的起先处,不要一连在首先次利用它们的地点做注明。如

 

         void
MyMethod()

          {

              int int1 =
0;         // beginning of method block

 

if
(condition)

{

                  int
int2 = 0;     // beginning of “if” block

                  …

              }

          }

 

        可是也有3个不一

       

                for (int i = 0; i
< maxLoops; i++)

                {

                    …

                }

 

        应防止差异层次间的变量重名,如

 

            int
count;

            …

void
MyMethod()

{

                if
(condition)

                {

                    int count =
0;     // 避免

                     …

                 }

                 …

}

 

3.运用括号鲜明操作顺序

4.4   类和接口的宣示

      1 在章程名与后来的左括号间没有别的空格。

      2 左花括号 “{”
出以往注明的下水并与之对齐,单独成行。

      3
方法间用七个空行隔断。

    

4.在switch语句中的最终一个case体使用break语句

4.5   字段的扬言

永不采用是 public 或 protected 的实例字段。假如防止将字段直接当面给开发人士,能够更自在地对类进行版本控制,原因是在保卫安全二进制包容性时字段无法被更改为属性。考虑为字段提供
get 和set 属性访问器,而不是使它们成为公共的。 get 和 set
属性访问器中可实施代码的留存使得能够展开持续立异,如在接纳质量大概取得属性更改文告时依据要求创造对象。下边的代码示例阐释带有get
和 set 属性访问器的个人实例字段的不利行使。 示例:

            public class
Control: Component

            {

               private int
handle;

               public  int
Handle

               {

                  get

                  {

                     return
handle;

                  }

               }

}

 

 

5.使用equals(),而不是==来检查和测试对象的对等关系

第伍章 命名规范

 

构造:

5.1   命名概述

名称应当辨证“什么”而不是“怎样”。通过幸免使用公开基础完成(它们会发生变更)的名号,能够保存简化复杂性的抽象层。例如,能够采纳 GetNextStudent(),而不是GetNextArrayElement()。

命名规则是:

采用正确名称时的不便或许评释要求越来越分析或概念项的目标。使名称丰硕长以便有一定的意思,并且丰硕短以制止冗长。唯一名称在编制程序上仅用于将各项区分开。表现力强的称呼是为了帮扶人们阅读;由此,提供人们能够知道的名目是有含义的。可是,请保管选拔的名号符合适用语言的规则和标准。

以下几点是引进的命名格局。

① 、防止不难被平白无故解释的难懂的名目,如方面名 AnalyzeThis(),或许性质名 xxK8。那样的称号会造成多义性。

二 、在类属性的名号中包涵类名是剩下的,如 Book.BookTitle。而是应当利用 Book.Title。

叁 、只要适度,在变量名的终极或开端加总括限定符(Avg、Sum、Min、Max、Index)。

④ 、在变量名中采取互补对,如
min/max、begin/end 和 open/close。

⑤ 、布尔变量名应该包涵 Is,那意味 Yes/No 或 True/False
值,如 fileIsFound。

六 、在命名状态变量时,防止选用诸如 Flag 的术语。状态变量不一致于布尔变量的地点是它能够享有多少个以上的只怕值。不是运用 documentFlag,而是利用更具描述性的称号,如documentFormatType。 (此项只供参考)

⑦ 、就算对于恐怕仅出现在多少个代码行中的生存期极短的变量,仍旧使用有含义的名目。仅对于短循环索引使用单字母变量名,如 i 或 j。
恐怕的情事下,尽量不要采纳原义数字或原义字符串,如

For i = 1
To 7。而是选拔命名常数,如 For i = 1 To
NUM_DAYS_IN_WEEK 以便于维护和驾驭。

1.构造动静有效的目的

5.2   大小写规则

大写

标识符中的具有字母都大写。仅对于由四个只怕更少字母组成的标识符使用该约定。例如:

 

System.IO

System.Web.UI

 

下表汇总了大写规则,并提供了区别类别的标识符的演示。

 

标识符

大小写

示例

Pascal

AppDomain

枚举类型

Pascal

ErrorLevel

枚举值

Pascal

FatalError

事件

Pascal

ValueChange

异常类

Pascal

WebException

注意 总是以 Exception 后缀结尾。

只读的静态字段

Pascal

RedValue

接口

Pascal

IDisposable

注意 总是以 I 前缀开始。

方法

Pascal

ToString

命名空间

Pascal

System.Drawing

属性

Pascal

BackColor

公共实例字段

Pascal

RedValue

注意 很少使用。属性优于使用公共实例字段。

受保护的实例字段

Camel

redValue

注意 很少使用。属性优于使用受保护的实例字段。

私有的实例字段

Camel

redValue

参数

Camel

typeName

方法内的变量

Camel

backColor

 

 

2.不要从构造函数中调用非final方法

5.3   缩写

      为了制止混淆和确认保证跨语言交互操作,请依照有关区缩写的行使的下列规则:

      1 毫不将缩写或缩略方式用作标识符名称的组成都部队分。例如,使用 GetWindow,而不用选用 GetWin。

      2 不用接纳电脑世界中未被大面积接受的缩写。

3 在适用的时候,使用名高天下的缩写替换冗长的短语名称。例如,用 UI 作为 User
Interface 缩

写,用 OLAP 作为 On-line
Analytical Processing 的缩写。

4在行使缩写时,对于抢先七个字符长度的缩写请使用 帕斯Carl 大小写或 Camel 大小写。例如,使用 HtmlButton 或 HTMLButton。不过,应当大写仅有多少个字符的缩写,如,System.IO,而不是 System.Io。

5 不要在标识符或参数名称中使用缩写。假设必须选择缩写,对于由多于四个字符所组成的缩写请

行使Camel 大小写,就算那和单词的正规缩写相抵触。

 

3.用嵌套的构造函数消除冗余代码

5.4   命名空间

      ① 、命名命名空间时的一般性规则是运用集团名称,后跟技术名称和可选的效率与设计,如下所示。

            CompanyName.TechnologyName[.Feature][.Design]

        例如:

         namespace
Langchao.Procurement             //浪潮公司的购入单管理系统

         namespace
Langchao.Procurement.DataRules   //浪潮公司的进货单管理系统的工作规则模块

 

      贰 、命名空间利用Pascal大小写,用逗号分隔开分离。

③ 、TechnologyName 指的是该品种的英文缩写,或软件名。
肆 、命名空间和类不可能应用同一的名字。例如,有3个类被取名为Debug后,就绝不再利用Debug作为八个称谓空间名。

  

那多少个处理:

5.5   类

1、使用 Pascal 大小写。

贰 、用名词或名词短语命名类。

三 、使用全称防止缩写,除非缩写已是一种公认的预订,如UGL450L、HTML   

4 、不要选拔项近来缀,如在类名称上对类使用 C 前缀。例如,使用类名称
FileStream,而不是

CFileStream。

5 、不要采纳下划线字符 (_)。

6 、有时候要求提供以字母 I 伊始的类名称,纵然该类不是接口。只要 I 是用作类名称组成部分的整套单词的首先个字母,那就是恰如其分的。例如,类名称 IdentityStore
是适用的。在妥当的地方,使用复合单词命名派生的类。派生类名称的第①个部分应该是基类的名称。例如,ApplicationException
对于从名为 Exception 的类派生的类是适合的名号,原因ApplicationException
是一种Exception。请在应用该规则时开始展览合理的判定。例如,Button 对于从 Control
派生的类是恰如其分的名称。固然按钮是一种控件,不过将 Control
作为类名称的一有的将使名称不须求地加长。

 

            public class
FileStream

            public class
Button

public class
String

 

   

1.使用不受检查、运行时的11分来告诉或然在程序逻辑中失误的不得了未查证错误

5.6   接口

      以下规则概述接口的命名指南:

      一 、用名词或名词短语,也许描述行为的形容词命名接口。例如,接口名称 IComponent 使用描述性

名词。接口名称 ICustomAttributeProvider 使用名词短语。名称 IPersistable 使用形容词。

2、使用 Pascal 大小写。

      三 、少用缩写。

四 、给接口名称加上字母 I 前缀,以提醒该类型为接口。在定义类/接口对(个中类是接口的行业内部

落到实处)时行使相似的称号。五个称呼的界别应该只是接口名称上有字母 I 前缀。

 

伍 、不要选拔下划线字符 (_)。

⑥ 、当类是接口的正式进行时,定义这一对类/接口组合就要选用相似的名目。多个名称的差别之处

只是接口名前有三个I前缀。

 

          以下是科学命名的接口的以身作则。

 

                public
interface IServiceProvider

                public
interface IFormatable

 

          以下代码示例阐释如何定义
IComponent 接口及其标准落到实处 Component 类。

 

               public
interface IComponent

               {

                   //
Implementation code goes here.

               }

              

               public
class Component: IComponent

               {

                   //
Implementation code goes here.

}

 

 

2.施用检查卓殊来告诉或然产生,而在常规的程序运转时极少爆发的错误

5.7   属性 (Attribute)

应当总是将后缀 Attribute 添加到自定义属性类。以下是科学命名的属性类的演示。

 

          public class
ObsoleteAttribute

          {

}  

 

3.用重临代码报告可预言的情事改变

5.8   枚举 (Enum)

       枚举 (Enum) 值类型从 Enum 类继承。以下规则概述枚举的命名指南:

           1 对此 Enum 类型和值名称使用 帕斯Carl 大小写。

           2 少用缩写。

           3 不要在 Enum 类型名称上运用 Enum 后缀。

           4 对大多数 Enum 类型应用单数名称,可是对作为位域的 Enum 类型应用复数名称。

           5 总是将 FlagsAttribute 添加到位域 Enum 类型。

 

4.仅转化万分来添加新闻

5.9   参数

       以下规则概述参数的命名指南:

           ① 、使用描述性参数名称。参数名称应当持有丰富的描述性,以便参数的称谓及其类型可用以在多数状态下规定它的意义。

       二 、对参数名称使用 Camel 大小写。

           叁 、 使用描述参数的含义的名称,而毫不使用描述参数的花色的名目。开发工具将提供关于参数的连串的有含义的新闻。因而, 通过讲述意义,能够更好地行使参数的名称。少用基于项指标参数名称,仅在符合利用它们的地点使用它们。

           四 、不要使用保留的参数。保留的参数是专用参数,假设急需,可以在今后的本子中公开它们。相反,尽管在类库的以后版本中供给越多的数据,请为艺术添加新的重载。

           ⑤ 、不要给参数名称加匈牙利(Magyarország)语类型表示法的前缀。

       以下是正确命名的参数的演示。

 

               Type
GetType(string typeName)

string
Format(string format, args() As object)

 

 

 

5.毫不专擅处置运转时要么不当极度

5.10 方法

       以下规则概述方法的命名指南:

           1 选拔动词或动词短语命有名的模特式。

           2 使用 Pascal
大小写。

           3
以下是没错命名的办法的实例。

 

              RemoveAll()

              GetCharArray()

Invoke()

 

 

6.用finally语句块释放能源

5.11 属性 (property)

        以下规则概述属性的命名指南:

            1 使用名词或名词短语命名属性。

            2 使用 Pascal 大小写。

            3 不要选用匈牙利(Magyarország)语表示法。

4 考虑用与天性的功底项目相同的名目创立属性。例如,假如声明名为 Color 的性质,则属

性的品种同样应该是 Color。请参阅本主旨中前边的以身作则。

 

          以下代码示例阐释正确的质量命名。

 

                 public class
SampleClass

                 {

                      public
Color BackColor

                      {

                           //
Code for Get and Set accessors goes here.

                       }

                  }

 

            以下代码示例阐释提供其名目与品种相同的品质。

 

                 public enum
Color

                 {

                     // Insert
code for Enum here.

                  }

 

 

                  public class
Control

{

                       public Color
Color

                       {

get

{

// Insert
code here.

}

set

{

// Insert
code here.

}

                        }

                   }

 

           以下代码示例不科学,原因是
Color 属性是 Integer 类型的。

 

                public enum
Color

{

// Insert
code for Enum here.

}

 

 

                public class
Control

                {

                    public int
Color

                    {

                        // Insert
code here

                     }

                }

 

           在不得法的演示中,不容许引用 Color 枚举的积极分子。Color.Xxx 将被阐述为访问一个分子,

该成员首先得到 Color 属性( C# 中为 int 类型)的值,然后再拜访该值的某部成员(该成

员必须是 System.Int32
的实例成员)。

 

 

断言:

5.12 事件

        以下规则概述事件的命名指南:

            壹 、对事件处理程序名称使用
伊芙ntHandler 后缀。

2、钦命八个名为 sender 和 e
的参数。sender 参数表示引发风云的目的。sender 参数始

终是object 类型的,尽管在能够采取更为特定的门类时也这么。与事件相关联的图景封装

在名为 e 的事件类的实例中。对 e 参数类型应用方便而一定的轩然大波类。

叁 、用 伊夫ntArgs 后缀命名事件参数类。

    ④ 、考虑用动词命名事件。

⑤ 、使用动名词(动词的“ing”格局)成立表示事件前的概念的轩然大波名称,用过去式表示事

件后。例如,能够撤销的 Close 事件应该拥有 Closing 事件和 Closed 事件。不要采用

BeforeXxx/AfterXxx 命名情势。

            ⑥ 、不要在档次的轩然大波注明上应用前缀可能后缀。例如,使用 Close,而不要选取 OnClose。

⑦ 、日常景况下,对于能够在派生类中重写的风浪,应在类型上提供1个受保险的不二法门(称为

OnXxx)。此办法只应具有事件参数 e,因为发送方总是类型的实例。

 

    以下示例阐释具有卓殊名称和参数的事件处理程序。

 

            public delegate
void MouseEventHandler(object sender, MouseEventArgs e);

 

      以下示例阐释正确命名的轩然大波参数类。

 

                public class
MouseEventArgs : EventArgs

                {

                   int x;

               int y;

 

                  public MouseEventArgs(int x, int y)

                  {

this.x =
x;

this.y =
y;

}

 

                  public int X

                  {

                      get

                      {

                          return x;

                      }

                  }

 

                  public int Y

                  {

                 get

                       {

                           return y;

                       }

                  }

                }

 

1.如约预订编制程序

5.13 常量 (const)

        以下规则概述常量的命名指南:

        全数单词大写,四个单词之间用
“_” 隔开。 如

 

                 public
const string PAGE_TITLE = “Welcome”;

          

 

2.用无用代码消除机制落到实处断言

5.14 字段

        以下规则概述字段的命名指南:

            1、private、protected 使用 Camel 大小写。

            2、public 使用 Pascal 大小写。

③ 、拼写出字段名称中央银行使的具备单词。仅在开发职员一般都能清楚时利用缩写。字段名称不

要采用大写字母。上面是科学命名的字段的示范。

 

                class
SampleClass

                {

                    string
url;

             string
destinationUrl;

}

 

            四 、不要对字段名使用匈牙利(Magyarország)语表示法。好的称呼描述语义,而非类型。

伍 、不要对字段名或静态字段名应用前缀。具体说来,不要对字段名称应用前缀来分歧静态和非静态字段。例如,应用
g_ 或 s_ 前缀是不科学的。

⑥ 、对预订义对象实例使用公共静态只读字段。即使存在对象的预约义实例,则将它们注脚为

指标自作者的公共静态只读字段。使用
帕斯Carl 大小写,原因是字段是集体的。上边包车型大巴代码

演示阐释公共静态只读字段的不Lyly用。

 

                  public struct
Color

                  {

                      public static readonly Color Red = new
Color(0x0000FF);

 

                      public Color(int rgb)

{

 // Insert
code here.}

                          public Color(byte r, byte g, byte
b)

                          {

// Insert
code here.

                           }

 

                      public byte RedValue

                      {

                           get

                           {

                                return Color;

                           }

                       }

                   }

 

 

3.用断言捕捉代码中的逻辑错误

5.15 静态字段

       以下规则概述静态字段的命名指南:

           ① 、使用名词、名词短语或许名词的缩写命名静态字段。

           2、使用 Pascal 大小写。

           ③ 、对静态字段名称使用匈牙利(Magyarország)语表示法前缀。

           ④ 、提出尽量使用静态属性而不是公家静态字段。

 

4.用断言检查和测试方法的放权条件和前置条件

5.16 集合

     汇聚是一组结合在共同的切近的类型化对象,如哈希表、查询、堆栈、字典和列表,集合的命名

提议用复数。

 

并发:

5.17 措词

幸免使用与常用的 .NET 框架命名空间重复的类名称。例如,不要将以下任何名称用作类名称:

System、Collections、Forms 或
UI。有关 .NET 框架命名空间的列表,请参阅类库。

其余,制止选用和以下重点字龃龉的标识符。

AddHandler

AddressOf

Alias

And

Ansi

As

Assembly

Auto

Base

Boolean

ByRef

Byte

ByVal

Call

Case

Catch

CBool

CByte

Cchar

CDate

CDec

CDbl

Char

Cint

Class

CLng

CObj

Const

Cshort

CSng

CStr

CType

Date

Decimal

Declare

Default

Delegate

Dim

Do

Double

Each

Else

ElseIf

End

Enum

Erase

Error

Event

Exit

ExternalSource

False

Finalize

Finally

Float

For

Friend

Function

Get

GetType

Goto

Handles

If

Implements

Imports

In

Inherits

Integer

Interface

Is

Let

Lib

Like

Long

Loop

Me

Mod

Module

MustInherit

MustOverride

MyBase

MyClass

Namespace

New

Next

Not

Nothing

NotInheritable

NotOverridable

Object

On

Option

Optional

Or

Overloads

Overridable

Overrides

ParamArray

Preserve

Private

Property

Protected

Public

RaiseEvent

ReadOnly

ReDim

Region

REM

RemoveHandler

Resume

Return

Select

Set

Shadows

Shared

Short

Single

Static

Step

Stop

String

Structure

Sub

SyncLock

Then

Throw

To

True

Try

TypeOf

Unicode

Until

volatile

When

While

With

WithEvents

WriteOnly

Xor

Eval

extends

instanceof

package

var

   

   

 

1.仅在卓绝的地方选拔线程

第六章 语句

同步:

6.1   每行四个口舌

         每行最多带有一个说话。如

             a++;       //推荐

             b–;       //推荐

a++;
b–;  //不推荐

 

1.防止同步

6.2 复合语句

复合语句是指包罗”父语句{子语句;子语句;}”的讲话,使用复合语句应遵循以下几点

            1 子语句要缩进。

2 左花括号“{”
在复合语句父语句的下一行并与之对齐,单独成行。

3
即便只有一条子语句要不要不难花括号“ {}”。 如

                  while  (d + =  s++)

                  {

                      n++;

                    }

     

2.用同台的包装器,提供联合接口

6.3 return 语句

        return语句中不应用括号,除非它能使再次来到值越发分明。如

 

              return;

              return myDisk.size();

              return (size ? size : defaultSize);

 

3.即使措施包括多少个不需求一块的主要操作,那么毫无一起整个艺术

6.4 if、 if-else、if else-if 语句

        if、 if-else、if else-if 语句使用格式

 

            if
(condition)

            {

                statements;

            }

            if (condition)

            {

                statements;

            }

            else

            {

                statements;

            }

 

            if (condition)

            {

                statements;

            }

            else if (condition)

            {

                statements;

            }

            else

            {

                statements;

            }

        

 

4.读写实例变量的时候防止不须要的一道

6.4   for、foreach 语句

        for 语句使用格式

 

            for (initialization; condition;
update)

            {

                statements;

            }

 

       空的 for 语句(全数的操作都在initialization、condition 或 update中贯彻)使用格式

 

              for (initialization; condition; update);    //
update user id

       

       foreach 语句使用格式

 

              foreach
(object obj in array)

              {

                  statements;

}

 

        注意 1在循环过程中不要改动循环计数器。

           2对每个空循环体给出确认性注释。

     

5.使用notify()而不是notifyAll()

6.5 while 语句

        while 语句使用格式

 

            while
(condition)

            {

                statements;

            }

 

         空的 while 语句使用格式

   

              while
(condition);

               

6.为联合开始化使用重复检查格局

6.7.       do – while 语句

         do –
while 语句使用格式

              do

              {

                  statements;

              }
while (condition);       

       

效率:

6.8.      switch – case 语句

         switch –
case  语句使用格式

              switch
(condition)

              {

                     case
1:

                         statements;

                         break;

 

                     case
2:

                         statements;

                         break;

 

                     default:

                         statements;

                         break;

                 }

 

           注意:

               一 、语句switch中的种种case各占一行。

               二 、语句switch中的case按字母顺序排列。

               三 、为全部switch语句提供default分支。

               肆 、全数的非空 case 语句必须用 break; 语句结束。

 

 

1.施用懒惰初阶化

6.9. try – catch 语句      

          try –
catch  语句使用格式

              try

              {

                  statements;

              }

              catch
(ExceptionClass e)

              {

                  statements;

              }

              finally

              {

                statements;

              }

   

2.幸免创制不要求的靶子

6.10.   using 块语句      

         using 块语句使用格式

             using
(object)

             {

                 statements;

             }

 

3.再度开头化一碗水端平复行使对象,尽量不要新建对象

6.11.   goto 语句      

  goto 语句使用格式

             goto Label1:

                 statements;

              Lable1:

                  statements;

 

4.把优化学工业作留在日后

第柒章 控件命名规则

卷入约定:

7.1 命名格局

控件名简写+英文描述,英文描述首字母大写

1.将常常利用、更改、同时揭橥依旧相互依存的档次,放在同三个包里

7.2   首要控件名简写对照表

控件名                          简写            控件名                        简写

Label                             lbl            TextBox                               txt

Button                            btn            LinkButton                    lnkbtn

ImageButton                imgbtn         DropDownList                ddl

ListBox                           lst             DataGrid                    dg

DataList                       dl             CheckBox                          chk

CheckBoxList                   chkls         RadioButton                      rdo

RadioButtonList                rdolt                Image                                  img

Panel                            pnl            Calender                              cld

AdRotator                        ar             Table                                  tbl

RequiredFieldValidator       rfv             CompareValidator                       cv

RangeValidator                 rv               RegularExpressionValidator   rev

ValidatorSummary            vs             CrystalReportViewer             rptvew

2.一起封闭原则

第八章 其他

 

3.录取/发表等于原则

8.1 表达式

1 幸免在表明式中用赋值语句

3 幸免对浮点类型做等于或不对等判断

 

4.无环凭借原则

8.2 类型转换

1尽量幸免强制类型转换。

2要是不得不做类型转换,尽量用显式格局。

5.将不平静的类和接口隔绝在单独的包中

附录一: 匈牙利(Hungary)命名法

匈牙利(Magyarország)命名法是一名匈牙利(Hungary)程序员发明的,而且他在微软工作了多年。此命名法正是经过微软的种种成品和文书档案传出来的。多数有经历的程序员,不管他们用的是哪门儿语言,都或多或少在运用它。

那种命名法的主干条件是:

变量名属性类型对象描述

即贰个变量名是由三有的音讯整合,那样,程序员很简单掌握变量的种类、用途,而且方便记念。

上边是有的推介应用的规则例子,你可以接纳使用,也得以依据个体爱好作些修改再用之。

⑴属性部分:

全局变量: g_

常量 : c_

类成员变量: m_

⑵类型部分:

指针: p

句柄: h

布尔型: b

浮点型: f

无符号: u

⑶描述部分:

初始化: Init

一时半刻变量: Tmp

目标目的: Dst

源对象: Src

窗口: Wnd

上面举例表达:

hwnd: h代表句柄,wnd代表窗口,合起来为“窗口句柄”。

m_bFlag: m表示成员变量,b表示布尔,合起来为:“有个别类的成员变量,布尔型,是一个气象标志”。

6.易于修改的包不要借助于难以修改的包

7.最大化抽象最大化稳定性

8.将高层设计和架构作为稳定的虚幻,协会为平安的包

为了让学习变得轻松、高效,前几天给大家免费享用一套Java教学财富。援助我们在改为Java架构师的征途上大胆。须求质地的迎接加入学习调换群:9285,05736

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图