C#程序的布局组成
图2ˉ1展示了C#程序的一些基本特性。
图2ˉ1中的代码由MyApp类和Apparel类组成,其中,MyApp类包含了程序逻辑,Apparel类包含数据。这个程序创建了一个Apparel实例,并将其赋给myApparel。然后用这个对象将类成员FabType和Price的值输出到控制台。需要注意如下重要特性:
1.using语句指定了命名空间System。在第1章中提到过,.NET类库组织为多个命名空间,其中System命名空间包含所有简单数据类型。using语句就是在告诉编译器,处理引用时可以到该命名空间去搜索,而无需使用完全限定名。例如,可以引用label,而不用引用完全限定名System.Web.UI.WebControls.Label。
注意:名字的大小写可以基于如下两种机制:
1.Pascal。每个单词的首字母大写(如MyClassAdder)。
2.Camel。除第一个单词外,每个单词的首字母大写(如myClassAdder)。
对此有一个很好的经验:除了参数和局部变量外,其他的命名均遵循Pascal大小写机制。
对C#程序加注释
C#编译器支持三种类型的嵌入注释:XML注释、加双斜杠的单行注释(//)和多行注释(/ˇˇ/),大多数程序员应该对后面两种注释都很熟悉:
XML注释以三个斜杠开头,通常包含XML标记,用于说明代码的某个特定方面,如结构、类或类成员。C#解析器能展开XML标记来提供附加信息,并将其导出到一个外部文件以便进一步处理。
如图2ˉ1所示,标记用于描述一个类型(类)。C#编译器还可以识别另外8种与特定程序元素相关的主要标记,参见表2ˉ2,这些标记直接放在所指的代码行前面。 表2ˉ2 XML文档标记
使用XML注释的原因是,这些注释能导出到一个单独的XML文件中,然后可以使用标准XML解析技术来处理。默认情况下,编译器不生成XML文件,所以,如果想生成XML文件,则需要明确地告诉编译器。下面的命令会编译源代码consoleapp.cs,并创建XML文件consoleXML:
如果编译图2ˉ1中的代码,可以发现,编译器将对代码中的所有public成员生成警告信息:
要想不再出现该警告信息,为编译命令添加/nowarn:1591选项即可。这个选项可以接受多个警告码(各警告码用逗号分隔)。
核心提示 有许多文档工具可以转换和扩展C#XML文档输出。其中最高级的文档工具之一是NDoc(ndoc.sourceforge.net),这是一个开源工具,不仅可以生成XML文档,而且可以使用反射进一步收集程序集的信息。
图2ˉ1中的代码由MyApp类和Apparel类组成,其中,MyApp类包含了程序逻辑,Apparel类包含数据。这个程序创建了一个Apparel实例,并将其赋给myApparel。然后用这个对象将类成员FabType和Price的值输出到控制台。需要注意如下重要特性:
1.using语句指定了命名空间System。在第1章中提到过,.NET类库组织为多个命名空间,其中System命名空间包含所有简单数据类型。using语句就是在告诉编译器,处理引用时可以到该命名空间去搜索,而无需使用完全限定名。例如,可以引用label,而不用引用完全限定名System.Web.UI.WebControls.Label。
2.所有程序逻辑和数据必须包含在一个类型定义中。程序逻辑和数据都必须放在类、结构、枚举、接口或委托中。例如,不同于Visual Basic,C#没有存在于类型作用域之外的全局变量。对类型及类型成员的访问要受访问修饰符的严格限制。本例中,访问修饰符public允许外部类(如MyApp)访问Apparel类的两个成员。
3.每个可执行的C#应用都必须有一个Main()方法。Main()方法要作为应用的入口点。它必须有static修饰符,并且第一个字母M必须大写。以下重载的Main()方法定义了一个返回类型,并接受一个参数表作为输入。
返回一个整型值:
参数是一个字符串数组,其中包含调用程序所用的命令行。例如,下面的命令行会执行程序MyApparel,并传递两个参数值:
核心提示 命令行的内容会作为一个实参传递给Main()方法,由System.Environment.CommandLine属性也可以得到命令行内容。
C#编程的一般注意事项
区分大小写
所有变量和关键字都是区分大小写的。若将图2ˉ1中的class替换为Class,这段代码就不能通过编译了。
命名约定
ECMA标准提供了C#代码所要遵循的命名约定原则。通过遵循严格的命名策略,不仅可以增强程序的一致性,而且可以最大程度地减少通常因随意命名而导致的大小写错误。表2ˉ1对一些较为重要的建议做了一个总结。
表2ˉ1 C#命名约定
| 类 型 | 大小写机制 | 注意事项及示例 |
| 类 | Pascal | ● 使用名词或名词短语 ● 尽量避免以字母I开头,因为这种命名是为接口保留的,接口都以字母I开头 ● 不要使用下划线 |
| 常量 | Pascal | public const double GramToPound=454.0 |
| 枚举类型 | Pascal | ● 枚举值名采用Pascal机制 ● 枚举名使用单数 public enum WarmColor{Orange,Yellow,Brown} |
| 事件 | Pascal | ● 事件处理方法应当有EventHandler后缀 ● 事件参数类要有后缀EventArgs |
| 异常 | Pascal | ● 有后缀Exception |
| 接口 | Pascal | ● 有字母I作为前缀IDisposable |
| 局部变量 | Camel | ● 有public修饰符的变量要采用Pascal机制int myIndex |
| 方法 | Pascal | ● 用动词或动词短语来命名 |
| 命名空间 | Pascal | ● 命名空间和类不要同名 ● 使用前缀来避免出现同名的命名空间 如,使用公司名对该公司开发的命名空间归类Acme.GraphicsLib |
| 成员属性 | Pascal | ● 使用名词或名词短语 |
| 参数 | Camel | ● 使用可以描述参数用途的有意义的名字 |
1.Pascal。每个单词的首字母大写(如MyClassAdder)。
2.Camel。除第一个单词外,每个单词的首字母大写(如myClassAdder)。
对此有一个很好的经验:除了参数和局部变量外,其他的命名均遵循Pascal大小写机制。
对C#程序加注释
C#编译器支持三种类型的嵌入注释:XML注释、加双斜杠的单行注释(//)和多行注释(/ˇˇ/),大多数程序员应该对后面两种注释都很熟悉:
XML注释以三个斜杠开头,通常包含XML标记,用于说明代码的某个特定方面,如结构、类或类成员。C#解析器能展开XML标记来提供附加信息,并将其导出到一个外部文件以便进一步处理。
如图2ˉ1所示,
| 标 记 | 说 明 |
| 开始和结束标记之间的文本给出了使用某个程序特性的示例 |
|
| cref属性包含异常名。 | |
| file属性设置为另外一个XML文件的文件名,该文件将包含在由此源代码生成的XML文档中 | |
| name属性包含参数名 | |
|
|
多数情况下设置如下: /// |
| 为类型提供 |
|
| 开始和结束标记之间的文本描述会指出一个方法或属性会返回什么 | |
| cref属性设置为一个相关类型、字段、方法或其他类型成员的名字 | |
| 包含一个类描述,供VisualStudio.NET中的IntelliSense使用 |
如果编译图2ˉ1中的代码,可以发现,编译器将对代码中的所有public成员生成警告信息:
要想不再出现该警告信息,为编译命令添加/nowarn:1591选项即可。这个选项可以接受多个警告码(各警告码用逗号分隔)。
核心提示 有许多文档工具可以转换和扩展C#XML文档输出。其中最高级的文档工具之一是NDoc(ndoc.sourceforge.net),这是一个开源工具,不仅可以生成XML文档,而且可以使用反射进一步收集程序集的信息。



浙公网安备 33010602011771号