目录

图灵程序设计丛书:精晓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# 编制程序指南

第2有的 C#与.NET平台
第1章
.NET之道
1.1
初识.NET平台
1.2
.NET平台构造块(CL纳瓦拉、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
第88中学的效率
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
    原则:代码尽量能不辱职务可扩充,但请不要过度重构,因为您不能够预言今后;
  • DKugaY 原则:不要再一次造轮子,除非你有时光依然您造的车轮会比外人的完美;
  • 面向对象编制程序原则:继承、封装、多态、抽象;

第贰局地 C#主干编制程序结构
第3章
C#宗旨编制程序结构
3.1
三个简易的C#程序
3.1.1
Main方法的别样花样
3.1.2
点名应用程序错误代码
3.1.3
拍卖命令行参数
精良Java程序员的编制程序风格,东软公司有限公司c。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.记录全部非规范行为

术语定义

类设计指南

  • 1个类/接口应该唯有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();
    }
}

在上述代码段中,大家创立多个基类 book,并定义了多个 Print()
方法,接着咱们创设三个子类 PocketBook,并通过 new
关键字来重写基类方法。在品种复杂的情况下,使用那种格局将造成大家无法精确预测是子类调用照旧父类调用,使代码复杂度升高。

  • 有道是能够将派生类当作基类对象来处理;
  • 永不引用基类的派生类;
  • 制止暴光1个指标注重的此外对象;
  • 制止双向注重;
  • 类应该有处境和行为;
  • 类应该保证其里面景况的一致性;

第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
率先个支柱: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 大小写

任何布置指南

  • 抛出尤其而不是回去某连串型的气象值;
  • 提供全部而有意义的不得了新闻;
  • 抛出卓殊的最实际的尤其;
  • 并非通过 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
富含/委托编程
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.断开非常短的语句:第2,如若带有了逗号,那么在每多个逗号后边都另起一行,把逗号前面包车型大巴每2个表明式都和逗号前面包车型地铁表达式的率先个假名对齐。第叁,应该在优先级最低的运算符从前断行。

文件命名组织

可维护性指南

  • 情势内部的代码段尽量不要跨越 7 行;
  • 保障全数成员个人,类的类型暗中认可为为 internal sealed
  • 防止重新标准;
  • 在其含有的命名空间内命名程序集;
  • 将源文件命名为它所蕴藏的花色;
  • 将源文件的内容限制为一系列型;
  • 将不一样的逻辑函数放到同二个部分类中;
  • 在行使五个项目时,使用 using
    关键字导入需求的命名空间,而不是项目标完整空间标识;
  • 并非选择魔法数;
  • 唯有当类型由此可见时才使用 var 关键字;
  • 概念变量时尽量地先河化;
  • 在竞相独立的代码段中定义一时变量;
  • 若对象有成团须求先河化的话在展开对象起初化的还要展开联谊初步化;
  • 绝不显式举办 bool 值的可比;
  • 幸免嵌套循环;
  • 在使用
    ifelsedowhileforforeachcase
    的同时使用 {}
  • switch case 代码段中添加 default 逻辑;
  • 在富有的 ifelse if 后再添加 else;
  • 防止接纳三个再次来到值;
  • 设想使用简易的规格语句代替 if else
  • 封装属性、方法或部分函数中的复杂表达式;
  • 再贴切的气象下品尝重载方法;
  • 选择可选参数来代表重载;
  • 防止采取命名参数;
  • 制止定义当先1个参数的签字;
  • 防止函数签名为布尔类型;
  • 永不将参数作为一时变量使用;
  • 将格局作为操作;
  • 不要诠释代码;

第捌章结构化卓殊处理
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
创设自定义十一分,第2有的
7.6.3
塑造自定义12分,第①片段
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.Specialized命名空间
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
小结

命名约定:

其次章   代码外观

框架指南

  • 使用 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
采纳拉姆da表明式重新编写Car伊夫nts示例
10.8
小结

1.名称应当有着实际意义

2.1      列宽

文书档案指南

  • 运用美式德语来编排相关文书档案;
  • 文书档案中的代码部分要力保完整性;
  • 与别的开发人士一起编写 xml 文书档案;
  • 编辑 MSDN 风格的技术文书档案;
  • 幸免内联注释;
  • 注释值应该用来解释复杂的算法或钻探;
  • 并非选取注释来跟踪要在此后形成的办事;

第11章 高级C#言语特色
11.1
索引器方法
11.1.1
采纳字符串值索引对象
11.1.2
重载索引器方法
11.1.3
金沙注册送58 ,多维的索引器
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#(第4版)》【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.方法名中的第②个单词小写,其后每个单词的率先个假名大写

4.5     字段的宣示

2.用动词命超级模特式

第④章 命名规范

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

5.1     命名概述

变量命名:

5.2     大小写规则

1.变量命中的第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.在标识符第2遍面世的时候用{@link}标签

6.10.     using 块语句

5.为Javadoc标签简历并选拔一套固定的依次

6.11.     goto 语句

6.应用首个人称叙述的款式

第⑩章    控件命名规则

7.编写独立的概述

7.1     命有名的模特式

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

7.2      首要控件名简写对照表

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

第八章    其他

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

8.1     表达式

11.方法名也许构造函数名不需圆括号,除非你想卓越2个不一样经常的署名

8.2     类型转换

诠释内容:

附录一: 匈牙利(Magyarország)命名法

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

 

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

在颇具的代码修改处加上修改标识的评释。

 

5.创设并使用一套关键词来标识尚未消除的题材

其次章   代码外观

 

6.在嵌套程度高的控制结构中标记出嵌套甘休位置

2.1   列宽

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

 

7.假诺三个case标记之间从未break语句,就在个中投入“fall-through”注释

2.2   换行

      当表达式超出或将要超过规定的列宽,遵守以下规则实行换行

          一 、在逗号后换行。

          二 、 在操作符前换行。

          叁 、规则1优先于规则2。

     当以上规则会促成代码混乱的时候自身使用更灵敏的换行规则。

 

             

8.标记空语句

2.3   缩进

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

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

 

编制程序约定:

2.4   空行

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

    在以下情况下利用多少个空行

    ① 、接口和类的概念之间。

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

    叁 、类与类的概念之间。       

     

    在偏下情形下行使1个空行

         一 、方法与措施、属性与质量之间。

         ② 、方法中变量注明与话语之间。

         三 、方法与艺术之间。

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

        ⑤ 、方法中的重回语句与其余的言语之间。

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

         ⑦ 、注释与它注释的语句间不空行,但与其它的言语间空一行。

 

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 、制止多余的或不妥贴的注释,如幽默的不主要的备注。

1一 、使用注释来解释代码的用意。它们不应作为代码的一只翻译。

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

                  …

              }

          }

 

        不过也有1个不等

       

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

                {

                    …

                }

 

        应幸免不相同层次间的变量重名,如

 

            int
count;

            …

void
MyMethod()

{

                if
(condition)

                {

                    int count =
0;     // 避免

                     …

                 }

                 …

}

 

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

4.4   类和接口的扬言

      1 在点子名与事后的左括号间没有别的空格。

      2 左花括号 “{”
现身在注脚的下水并与之对齐,单独成行。

      3
方法间用1个空行隔开分离。

    

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   //浪潮集团的购入单管理系统的工作规则模块

 

      ② 、命名空间利用帕斯Carl大小写,用逗号分隔断。

③ 、TechnologyName 指的是该项目标英文缩写,或软件名。
④ 、命名空间和类不能够选用同一的名字。例如,有3个类被取名为Debug后,就无须再利用Debug作为四个名号空间名。

  

不行处理:

5.5   类

1、使用 Pascal 大小写。

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

③ 、使用全称防止缩写,除非缩写已是一种公认的约定,如U奥迪Q7L、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.接纳不受检查、运转时的不行来告诉或然在程序逻辑中失误的不得了未查明错误

5.6   接口

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

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

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

2、使用 Pascal 大小写。

      叁 、少用缩写。

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

金玉满堂)时采用相似的名目。四个名称的区分应该只是接口名称上有字母 I 前缀。

 

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

六 、当类是接口的规范实施时,定义这一对类/接口组合就要接纳相似的称号。五个名称的不一样之处

只是接口名前有1个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 不要接纳匈牙利(Hungary)语表示法。

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 后缀。

② 、钦定七个名为 sender 和 e
的参数。sender 参数表示引发轩然大波的对象。sender 参数始

终是object 类型的,即便在能够动用进一步特定的连串时也这么。与事件相关联的情景封装

在名为 e 的风波类的实例中。对 e 参数类型应用方便而特定的事件类。

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

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

伍 、使用动名词(动词的“ing”方式)创造表示事件前的定义的事件名称,用过去式表示事

件后。例如,可以裁撤的 Close 事件应该具备 Closing 事件和 Closed 事件。不要接纳

BeforeXxx/AfterXxx 命超形式。

            六 、不要在品种的事件评释上采取前缀恐怕后缀。例如,使用 Close,而不要选拔 OnClose。

七 、平日状态下,对于能够在派生类中重写的事件,应在类型上提供八个受保证的措施(称为

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 大小写,原因是字段是公私的。下边包车型地铁代码

演示阐释公共静态只读字段的没错行使。

 

                  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各占一行。

               2、语句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.把优化办事留在日后

第9章 控件命名规则

卷入约定:

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)命名法是一名匈牙利(Magyarország)程序员发明的,而且他在微软做事了多年。此命名法正是经过微软的各种成品和文档传出来的。多数有经历的程序员,不管他们用的是哪门儿语言,都或多或少在选拔它。

那种命名法的中坚尺度是:

变量名属性类型目的描述

即一个变量名是由三片段音信整合,那样,程序员很不难精通变量的体系、用途,而且方便回忆。

下边是有些引进应用的条条框框例子,你能够采用使用,也足以根据个体喜欢作些修改再用之。

⑴属性部分:

全局变量: 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地图