# 分部类和方法(C# 编程指南)
可以将[类](https://msdn.microsoft.com/zh-CN/library/0b0thckt.aspx)或[结构](https://msdn.microsoft.com/zh-CN/library/ah19swz4.aspx)、[接口](https://msdn.microsoft.com/zh-CN/library/87d83y5b.aspx)或方法的定义拆分到两个或多个源文件中。每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来。
## 分部类
在以下几种情况下需要拆分类定义:
* 处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理。
* 使用自动生成的源时,无需重新创建源文件便可将代码添加到类中。Visual Studio 在创建 Windows 窗体、Web 服务包装代码等时都使用此方法。无需修改 Visual Studio 创建的文件,就可创建使用这些类的代码。
* 若要拆分类定义,请使用 [partial](https://msdn.microsoft.com/zh-CN/library/wbx7zzdd.aspx) 关键字修饰符,如下所示:
```
public partial class Employee
{
public void DoWork()
{
}
}
public partial class Employee
{
public void GoToLunch()
{
}
}
```
**partial** 关键字指示可在命名空间中定义该类、结构或接口的其他部分。所有部分都必须使用 **partial** 关键字。在编译时,各个部分都必须可用来形成最终的类型。各个部分必须具有相同的可访问性,如 **public**、**private** 等。
如果将任意部分声明为抽象的,则整个类型都被视为抽象的。如果将任意部分声明为密封的,则整个类型都被视为密封的。如果任意部分声明基类型,则整个类型都将继承该类。
指定基类的所有部分必须一致,但忽略基类的部分仍继承该基类型。各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口。在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用。最终类型是所有部分在编译时的组合。
| ![](https://box.kancloud.cn/2016-01-31_56adb62c1380a.jpg) 注意 |
| :-- |
| **partial** 修饰符不可用于委托或枚举声明中。 |
下面的示例演示嵌套类型可以是分部的,即使它们所嵌套于的类型本身并不是分部的也如此。
```
class Container
{
partial class Nested
{
void Test() { }
}
partial class Nested
{
void Test2() { }
}
}
```
编译时将对分部类型定义的特性进行合并。例如,请考虑下列声明:
```
[SerializableAttribute]
partial class Moon { }
[ObsoleteAttribute]
partial class Moon { }
```
它们等效于以下声明:
```
[SerializableAttribute]
[ObsoleteAttribute]
class Moon { }
```
将从所有分部类型定义中对以下内容进行合并:
* XML 注释
* 接口
* 泛型类型参数特性
* 类特性
* members
例如,请考虑下列声明:
```
partial class Earth : Planet, IRotate { }
partial class Earth : IRevolve { }
```
它们等效于以下声明:
```
class Earth : Planet, IRotate, IRevolve { }
```
### 限制
处理分部类定义时需遵循下面的几个规则:
* 要作为同一类型的各个部分的所有分部类型定义都必须使用 **partial** 进行修饰。例如,下面的类声明将生成错误:
```
public partial class A { }
//public class A { } // Error, must also be marked partial
```
* **partial** 修饰符只能出现在紧靠关键字 **class**、**struct** 或 **interface** 前面的位置。
* 分部类型定义中允许使用嵌套的分部类型,如下面的示例中所示:
```
partial class ClassWithNestedClass
{
partial class NestedClass { }
}
partial class ClassWithNestedClass
{
partial class NestedClass { }
}
```
* 要成为同一类型的各个部分的所有分部类型定义都必须在同一程序集和同一模块(.exe 或 .dll 文件)中进行定义。分部定义不能跨越多个模块。
* 类名和泛型类型参数在所有的分部类型定义中都必须匹配。泛型类型可以是分部的。每个分部声明都必须以相同的顺序使用相同的参数名。
* 下面的用于分部类型定义中的关键字是可选的,但是如果某关键字出现在一个分部类型定义中,则该关键字不能与在同一类型的其他分部定义中指定的关键字冲突:
* [public](https://msdn.microsoft.com/zh-CN/library/yzh058ae.aspx)
* [private](https://msdn.microsoft.com/zh-CN/library/st6sy9xe.aspx)
* [protected](https://msdn.microsoft.com/zh-CN/library/bcd5672a.aspx)
* [internal](https://msdn.microsoft.com/zh-CN/library/7c5ka91b.aspx)
* [abstract](https://msdn.microsoft.com/zh-CN/library/sf985hc5.aspx)
* [sealed](https://msdn.microsoft.com/zh-CN/library/88c54tsw.aspx)
* 基类
* [new](https://msdn.microsoft.com/zh-CN/library/51y09td4.aspx) 修饰符(嵌套部分)
* 泛型约束
有关更多信息,请参见 [类型参数的约束(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/d5x73970.aspx)。
## 示例 1
### 说明
下面的示例在一个分部类定义中声明 CoOrds 类的字段和构造函数,在另一个分部类定义中声明成员 PrintCoOrds。
### 代码
```
public partial class CoOrds
{
private int x;
private int y;
public CoOrds(int x, int y)
{
this.x = x;
this.y = y;
}
}
public partial class CoOrds
{
public void PrintCoOrds()
{
Console.WriteLine("CoOrds: {0},{1}", x, y);
}
}
class TestCoOrds
{
static void Main()
{
CoOrds myCoOrds = new CoOrds(10, 15);
myCoOrds.PrintCoOrds();
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
// Output: CoOrds: 10,15
```
## 示例 2
### 说明
从下面的示例可以看出,您也可以开发分部结构和接口。
### 代码
```
partial interface ITest
{
void Interface_Test();
}
partial interface ITest
{
void Interface_Test2();
}
partial struct S1
{
void Struct_Test() { }
}
partial struct S1
{
void Struct_Test2() { }
}
```
## 分部方法
分部类或结构可以包含分部方法。类的一个部分包含方法的签名。可以在同一部分或另一个部分中定义可选实现。如果未提供该实现,则会在编译时移除方法以及对方法的所有调用。
分部方法使类的某个部分的实施者能够定义方法(类似于事件)。类的另一部分的实施者可以决定是否实现该方法。如果未实现该方法,编译器将移除方法签名以及对该方法的所有调用。调用该方法,包括调用中的任何计算结果,在运行时没有任何影响。因此,分部类中的任何代码都可以随意地使用分部方法,即使未提供实现也是如此。如果调用了未实现的方法,将不会导致编译时错误或运行时错误。
在自定义生成的代码时,分部方法特别有用。这些方法允许保留方法名称和签名,因此生成的代码可以调用方法,而开发人员可以决定是否实现方法。与分部类非常类似,分部方法使代码生成器创建的代码和开发人员创建的代码能够协同工作,而不会产生运行时开销。
分部方法声明由两个部分组成:定义和实现。它们可以位于分部类的不同部分中,也可以位于同一部分中。如果不存在实现声明,则编译器将优化定义声明和对方法的所有调用。
```
// Definition in file1.cs
partial void onNameChanged();
// Implementation in file2.cs
partial void onNameChanged()
{
// method body
}
```
* 分部方法声明必须以上下文关键字 [partial](https://msdn.microsoft.com/zh-CN/library/wbx7zzdd.aspx) 开头,并且方法必须返回 [void](https://msdn.microsoft.com/zh-CN/library/yah0tteb.aspx)。
* 分部方法可以有 [ref](https://msdn.microsoft.com/zh-CN/library/14akc2c7.aspx) 参数,但不能有 [out](https://msdn.microsoft.com/zh-CN/library/t3c3bfhx.aspx) 参数。
* 分部方法为隐式 [private](https://msdn.microsoft.com/zh-CN/library/st6sy9xe.aspx) 方法,因此不能为 [virtual](https://msdn.microsoft.com/zh-CN/library/9fkccyh4.aspx) 方法。
* 分部方法不能为 [extern](https://msdn.microsoft.com/zh-CN/library/e59b22c5.aspx) 方法,因为主体的存在确定了方法是在定义还是在实现。
* 分部方法可以有 [static](https://msdn.microsoft.com/zh-CN/library/98f28cdx.aspx) 和 [unsafe](https://msdn.microsoft.com/zh-CN/library/chfa2zb8.aspx) 修饰符。
* 分部方法可以为泛型的。约束将放在定义分部方法声明上,但也可以选择重复放在实现声明上。参数和类型参数名称在实现声明和定义声明中不必相同。
* 您可以为已定义并实现的分部方法生成[委托](https://msdn.microsoft.com/zh-CN/library/900fyy8e.aspx),但不能为已经定义但未实现的分部方法生成委托。
## C# 语言规范
有关详细信息,请参阅 [C# 语言规范](https://msdn.microsoft.com/zh-CN/library/ms228593.aspx)。该语言规范是 C# 语法和用法的权威资料。
## 请参阅
[C# 编程指南](https://msdn.microsoft.com/zh-CN/library/67ef8sbd.aspx)
[类(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/x9afc042.aspx)
[结构(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/saxz13w4.aspx)
[接口(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/ms173156.aspx)
[分部(类型)(C# 参考)](https://msdn.microsoft.com/zh-CN/library/wbx7zzdd.aspx)
- C# 编程指南
- 在 C# 程序内部
- Hello World -- 您的第一个程序(C# 编程指南)
- C# 程序的通用结构(C# 编程指南)
- C# 编码约定(C# 编程指南)
- 数组(C# 编程指南)
- 作为对象的数组(C# 编程指南)
- 一维数组(C# 编程指南)
- 多维数组(C# 编程指南)
- 交错数组(C# 编程指南)
- 对数组使用 foreach(C# 编程指南)
- 将数组作为参数传递(C# 编程指南)
- 使用 ref 和 out 传递数组(C# 编程指南)
- 隐式类型的数组(C# 编程指南)
- 类和结构(C# 编程指南)
- 类(C# 编程指南)
- 对象(C# 编程指南)
- 结构(C# 编程指南)
- 继承(C# 编程指南)
- 多态性(C# 编程指南)
- 抽象类、密封类及类成员(C# 编程指南)
- 静态类和静态类成员(C# 编程指南)
- 成员(C# 编程指南)
- 访问修饰符(C# 编程指南)
- 字段(C# 编程指南)
- 常量(C# 编程指南)
- 属性(C# 编程指南)
- 方法(C# 编程指南)
- 构造函数(C# 编程指南)
- 析构函数(C# 编程指南)
- 对象和集合初始值设定项(C# 编程指南)
- 如何:使用 foreach 访问集合类(C# 编程指南)
- 嵌套类型(C# 编程指南)
- 分部类和方法(C# 编程指南)
- 匿名类型(C# 编程指南)
- 委托(C# 编程指南)
- 使用委托(C# 编程指南)
- 带有命名方法的委托与带有匿名方法的委托(C# 编程指南)
- 如何:合并委托(多路广播委托)(C# 编程指南)
- 如何:声明、实例化和使用委托(C# 编程指南)
- 枚举类型(C# 编程指南)
- 事件(C# 编程指南)
- 如何:订阅和取消订阅事件(C# 编程指南)
- 如何:发布符合 .NET Framework 准则的事件(C# 编程指南)
- 如何:在派生类中引发基类事件(C# 编程指南)
- 如何:实现接口事件(C# 编程指南)
- 如何:使用字典存储事件实例(C# 编程指南)
- 如何:实现自定义事件访问器(C# 编程指南)
- 异常和异常处理(C# 编程指南)
- 使用异常(C# 编程指南)
- 异常处理(C# 编程指南)
- 创建和引发异常(C# 编程指南)
- 编译器生成的异常(C# 编程指南)
- 如何:使用 try/catch 处理异常(C# 编程指南)
- 如何:使用 finally 执行清理代码(C# 编程指南)
- 如何:捕捉非 CLS 异常
- 文件系统和注册表(C# 编程指南)
- 如何:循环访问目录树(C# 编程指南)
- 如何:获取有关文件、文件夹和驱动器的信息(C# 编程指南)
- 如何:创建文件或文件夹(C# 编程指南)
- 如何:复制、删除和移动文件和文件夹(C# 编程指南)
- 如何:提供文件操作进度对话框(C# 编程指南)
- 如何:写入文本文件(C# 编程指南)
- 如何:读取文本文件中的内容(C# 编程指南)
- 如何:一次一行地读取文本文件 (Visual C#)
- 如何:在注册表中创建注册表项 (Visual C#)
- 泛型(C# 编程指南)
- 泛型介绍(C# 编程指南)
- 泛型的优点(C# 编程指南)
- 泛型类型参数(C# 编程指南)
- 类型参数的约束(C# 编程指南)
- 泛型类(C# 编程指南)
- 泛型接口(C# 编程指南)
- 泛型方法(C# 编程指南)
- 泛型和数组(C# 编程指南)
- 泛型委托(C# 编程指南)
- 泛型代码中的默认关键字(C# 编程指南)
- C++ 模板和 C# 泛型之间的区别(C# 编程指南)
- 运行时中的泛型(C# 编程指南)
- .NET Framework 类库中的泛型(C# 编程指南)
- 泛型和反射(C# 编程指南)
- 泛型和特性(C# 编程指南)
- 索引器(C# 编程指南)
- 使用索引器(C# 编程指南)
- 接口中的索引器(C# 编程指南)
- 属性和索引器之间的比较(C# 编程指南)
- 接口(C# 编程指南)
- 显式接口实现(C# 编程指南)
- 如何:显式实现接口成员(C# 编程指南)
- 如何:显式实现两个接口的成员(C# 编程指南)
- 互操作性(C# 编程指南)
- 互操作性概述(C# 编程指南)
- 如何:通过使用 Visual C# 功能访问 Office 互操作对象(C# 编程指南)
- 如何:在 COM 互操作编程中使用索引属性(C# 编程指南)
- 如何:使用平台调用播放波形文件(C# 编程指南)
- 演练:Office 编程(C# 和 Visual Basic)
- COM 类示例(C# 编程指南)
- LINQ 查询表达式(C# 编程指南)
- 查询表达式基础(C# 编程指南)
- 如何:在 C# 中编写 LINQ 查询
- 如何:查询对象集合(C# 编程指南)
- 如何:从方法中返回查询(C# 编程指南)
- 如何:在内存中存储查询结果(C# 编程指南)
- 如何:对查询结果进行分组(C# 编程指南)
- 如何:创建嵌套组(C# 编程指南)
- 如何:对分组操作执行子查询(C# 编程指南)
- 如何:按连续键对结果进行分组(C# 编程指南)
- 如何:在运行时动态指定谓词筛选器(C# 编程指南)
- 如何:执行内部联接(C# 编程指南)
- 如何:执行分组联接(C# 编程指南)
- 如何:执行左外部联接(C# 编程指南)
- 如何:对 Join 子句的结果进行排序(C# 编程指南)
- 如何:使用复合键进行联接(C# 编程指南)
- 如何:执行自定义联接操作(C# 编程指南)
- 如何:在查询表达式中处理 Null 值(C# 编程指南)
- 如何:在查询表达式中处理异常(C# 编程指南)
- Main() 和命令行参数(C# 编程指南)
- 命令行参数(C# 编程指南)
- 如何:显示命令行参数(C# 编程指南)
- 如何:使用 foreach 访问命令行参数(C# 编程指南)
- Main() 返回值(C# 编程指南)
- 命名空间(C# 编程指南)
- 使用命名空间(C# 编程指南)
- 如何:使用全局命名空间别名(C# 编程指南)
- 如何:使用 My 命名空间(C# 编程指南)
- 可以为 null 的类型(C# 编程指南)
- 使用可以为 null 的类型(C# 编程指南)
- 装箱可以为 null 的类型(C# 编程指南)
- 如何:标识可以为 null 的类型(C# 编程指南)
- 如何:安全地将 bool? 强制转换为 bool(C# 编程指南)
- 语句、表达式和运算符(C# 编程指南)
- 语句(C# 编程指南)
- 表达式(C# 编程指南)
- 运算符(C# 编程指南)
- 匿名函数(C# 编程指南)
- 可重载运算符(C# 编程指南)
- 转换运算符(C# 编程指南)
- 如何:使用运算符重载创建复数类(C# 编程指南)
- 相等比较(C# 编程指南)
- 字符串(C# 编程指南)
- 如何:串联多个字符串(C# 编程指南)
- 如何:修改字符串内容(C# 编程指南)
- 如何:比较字符串(C# 编程指南)
- 如何:拆分字符串(C# 编程指南)
- 如何:使用字符串方法搜索字符串(C# 编程指南)
- 如何:使用正则表达式搜索字符串(C# 编程指南)
- 如何:确定字符串是否表示数值(C# 编程指南)
- 如何:将字符串转换为 DateTime(C# 编程指南)
- 如何:在旧式编码与 Unicode 之间转换(C# 编程指南)
- 如何:将 RTF 转换为纯文本(C# 编程指南)
- 类型(C# 编程指南)
- 强制转换和类型转换(C# 编程指南)
- 装箱和取消装箱(C# 编程指南)
- 使用类型 dynamic(C# 编程指南)
- 如何:使用 as 和 is 运算符安全地进行强制转换(C# 编程指南)
- 如何:将字节数组转换为 int(C# 编程指南)
- 如何:将字符串转换为数字(C# 编程指南)
- 如何:在十六进制字符串与数值类型之间转换(C# 编程指南)
- 不安全代码和指针(C# 编程指南)
- 固定大小的缓冲区(C# 编程指南)
- 指针类型(C# 编程指南)
- XML 文档注释(C# 编程指南)
- 建议的文档注释标记(C# 编程指南)
- 处理 XML 文件(C# 编程指南)
- 文档标记的分隔符(C# 编程指南)
- 如何:使用 XML 文档功能(C# 编程指南)
- C# 参考
- C# 关键字
- 类型(C# 参考)
- 值类型(C# 参考)
- bool(C# 参考)
- byte(C# 参考)
- char(C# 参考)
- decimal(C# 参考)
- double(C# 参考)
- enum(C# 参考)
- float(C# 参考)
- int(C# 参考)
- long(C# 参考)
- sbyte(C# 参考)
- short(C# 参考)
- struct(C# 参考)
- uint(C# 参考)
- ulong(C# 参考)
- ushort(C# 参考)
- 引用类型(C# 参考)
- class(C# 参考)
- 委托(C# 参考)
- dynamic(C# 参考)
- 接口(C# 参考)
- object(C# 参考)
- string(C# 参考)
- 内插字符串(C# 和 Visual Basic 引用)
- void(C# 参考)
- var(C# 参考)
- 类型参考表(C# 参考)
- 内置类型表(C# 参考)
- 整型表(C# 参考)
- 浮点型表(C# 参考)
- 默认值表(C# 参考)
- 值类型表(C# 参考)
- 隐式数值转换表(C# 参考)
- 显式数值转换表(C# 参考)
- 设置数值结果表的格式(C# 参考)
- 修饰符(C# 参考)
- 访问修饰符(C# 参考)
- 可访问性级别(C# 参考)
- 可访问域(C# 参考)
- 可访问性级别的使用限制(C# 参考)
- internal(C# 参考)
- private(C# 参考)
- protected(C# 参考)
- public(C# 参考)
- abstract(C# 参考)
- async(C# 参考)
- const(C# 参考)
- event(C# 参考)
- extern(C# 参考)
- in(泛型修饰符)(C# 参考)
- out(泛型修饰符)(C# 参考)
- override(C# 参考)
- readonly(C# 参考)
- sealed(C# 参考)
- static(C# 参考)
- unsafe(C# 参考)
- virtual(C# 参考)
- volatile(C# 参考)
- 语句关键字(C# 参考)
- 选择语句(C# 参考)
- if-else(C# 参考)
- switch(C# 参考)
- 迭代语句(C# 参考)
- do(C# 参考)
- for(C# 参考)
- foreach,in(C# 参考)
- while(C# 参考)
- 跳转语句(C# 参考)
- break(C# 参考)
- continue(C# 参考)
- goto(C# 参考)
- return(C# 参考)
- 异常处理语句(C# 参考)
- throw(C# 参考)
- try-catch(C# 参考)
- try-finally(C# 参考)
- try-catch-finally(C# 参考)
- Checked 和 Unchecked(C# 参考)
- checked(C# 参考)
- unchecked(C# 参考)
- fixed 语句(C# 参考)
- “锁定”语句(C# 参考)
- 方法参数(C# 参考)
- params(C# 参考)
- ref(C# 参考)
- out(C# 参考)
- out 参数修饰符(C# 参考)
- 命名空间关键字(C# 参考)
- 命名空间(C# 参考)
- using(C# 参考)
- using 指令(C# 参考)
- using 语句(C# 参考)
- 外部别名(C# 参考)
- 运算符关键字(C# 参考)
- as(C# 参考)
- await(C# 参考)
- is(C# 参考)
- new(C# 参考)
- new 运算符(C# 参考)
- new 修饰符(C# 参考)
- new 约束(C# 参考)
- sizeof(C# 参考)
- typeof(C# 参考)
- true(C# 参考)
- true 运算符(C# 参考)
- true 字面常数(C# 参考)
- false(C# 参考)
- false 运算符(C# 参考)
- false 字面常数(C# 参考)
- stackalloc(C# 参考)
- nameof(C# 和 Visual Basic 引用)
- 转换关键字(C# 参考)
- explicit(C# 参考)
- implicit(C# 参考)
- 运算符(C# 参考)
- 访问关键字(C# 参考)
- base(C# 参考)
- this(C# 参考)
- 文字关键字(C# 参考)
- null(C# 参考)
- default(C# 参考)
- 上下文关键字(C# 参考)
- add(C# 参考)
- get(C# 参考)
- global(C# 参考)
- 分部(类型)(C# 参考)
- 分部(方法)(C# 参考)
- remove(C# 参考)
- set(C# 参考)
- where(泛型类型约束)(C# 参考)
- value(C# 参考)
- yield(C# 参考)
- 查询关键字(C# 参考)
- from 子句(C# 参考)
- where 子句(C# 参考)
- select 子句(C# 参考)
- group 子句(C# 参考)
- into(C# 参考)
- orderby 子句(C# 参考)
- join 子句(C# 参考)
- let 子句(C# 参考)
- ascending(C# 参考)
- descending(C# 参考)
- on(C# 参考)
- equals(C# 参考)
- by(C# 参考)
- in(C# 参考)
- C# 运算符
- 运算符(C# 参考)
- () 运算符(C# 参考)
- . 运算符(C# 参考)
- :: 运算符(C# 参考)
- + 运算符(C# 参考)
- - 运算符(C# 参考)
- * 运算符(C# 参考)
- / 运算符(C# 参考)
- % 运算符(C# 参考)
- & 运算符(C# 参考)
- | 运算符(C# 参考)
- ^ 运算符(C# 参考)
- ! 运算符(C# 参考)
- ~ 运算符(C# 参考)
- = 运算符(C# 参考)
- < 运算符(C# 参考)
- > 运算符(C# 参考)
- ?: 运算符(C# 参考)
- ++ 运算符(C# 参考)
- -- 运算符(C# 参考)
- && 运算符(C# 参考)
- || 运算符(C# 参考)
- << 运算符(C# 参考)
- >> 运算符(C# 参考)
- == 运算符(C# 参考)
- != 运算符(C# 参考)
- <= 运算符(C# 参考)
- >= 运算符(C# 参考)
- += 运算符(C# 参考)
- -= 运算符(C# 参考)
- *= 运算符(C# 参考)
- /= 运算符(C# 参考)
- %= 运算符(C# 参考)
- &= 运算符(C# 参考)
- |= 运算符(C# 参考)
- ^= 运算符(C# 参考)
- <<= 运算符(C# 参考)
- >>= 运算符(C# 参考)
- -> 运算符(C# 参考)
- ?? 运算符(C# 参考)
- => 运算符(C# 参考)
- NULL 条件运算符(C# 和 Visual Basic)
- C# 预处理器指令
- #if(C# 参考)
- #else(C# 参考)
- #elif(C# 参考)
- #endif(C# 参考)
- #define(C# 参考)
- #undef(C# 参考)
- #warning(C# 参考)
- #error(C# 参考)
- #line(C# 参考)
- #region(C# 参考)
- #endregion(C# 参考)
- #pragma(C# 参考)
- #pragma warning(C# 参考)
- #pragma checksum(C# 参考)
- C# Compiler Options
- Command-line Building With csc.exe
- How to: Set Environment Variables for the Visual Studio Command Line
- Deployment of C# Applications
- C# Compiler Options Listed by Category
- C# Compiler Options Listed Alphabetically
- @ (C# Compiler Options)
- /addmodule (C# Compiler Options)
- /appconfig (C# Compiler Options)
- /baseaddress (C# Compiler Options)
- /bugreport (C# Compiler Options)
- /checked (C# Compiler Options)
- /codepage (C# Compiler Options)
- /debug (C# Compiler Options)
- /define (C# Compiler Options)
- /delaysign (C# Compiler Options)
- /doc (C# Compiler Options)
- /errorreport (C# Compiler Options)
- /filealign (C# Compiler Options)
- /fullpaths (C# Compiler Options)
- /help, /? (C# Compiler Options)
- /highentropyva (C# Compiler Options)
- /keycontainer (C# Compiler Options)
- /keyfile (C# Compiler Options)
- /langversion (C# Compiler Options)
- /lib (C# Compiler Options)
- /link (C# Compiler Options)
- /linkresource (C# Compiler Options)
- /main (C# Compiler Options)
- /moduleassemblyname (C# Compiler Option)
- /noconfig (C# Compiler Options)
- /nologo (C# Compiler Options)
- /nostdlib (C# Compiler Options)
- /nowarn (C# Compiler Options)
- /nowin32manifest (C# Compiler Options)
- /optimize (C# Compiler Options)
- /out (C# Compiler Options)
- /pdb (C# Compiler Options)
- /platform (C# Compiler Options)
- /preferreduilang (C# Compiler Options)
- /recurse (C# Compiler Options)
- /reference (C# Compiler Options)
- /resource (C# Compiler Options)
- /subsystemversion (C# Compiler Options)
- /target (C# Compiler Options)
- /target:appcontainerexe(C# 编译器选项)
- /target:exe (C# Compiler Options)
- /target:library (C# Compiler Options)
- /target:module (C# Compiler Options)
- /target:winexe (C# Compiler Options)
- /target:winmdobj(C# 编译器选项)
- /unsafe (C# Compiler Options)
- /utf8output (C# Compiler Options)
- /warn (C# Compiler Options)
- /warnaserror (C# Compiler Options)
- /win32icon (C# Compiler Options)
- /win32manifest (C# Compiler Options)
- /win32res (C# Compiler Options)
- C# Compiler Errors
- Compiler Error CS0001
- Compiler Error CS0006
- Compiler Error CS0007
- 编译器错误 CS0015
- Compiler Error CS0016
- Compiler Error CS0019
- Compiler Error CS0029
- Compiler Error CS0034
- Compiler Error CS0038
- Compiler Error CS0039
- Compiler Error CS0050
- Compiler Error CS0051
- Compiler Error CS0052
- Compiler Error CS0071
- Compiler Error CS0103
- Compiler Error CS0106
- Compiler Error CS0115
- Compiler Error CS0116
- Compiler Error CS0120
- Compiler Error CS0122
- Compiler Error CS0134
- Compiler Error CS0151
- 编译器错误 CS0163
- Compiler Error CS0165
- Compiler Error CS0173
- Compiler Error CS0178
- Compiler Error CS0188
- Compiler Error CS0201
- Compiler Error CS0229
- Compiler Error CS0233
- Compiler Error CS0234
- Compiler Error CS0246
- Compiler Error CS0260
- Compiler Error CS0266
- Compiler Error CS0269
- Compiler Error CS0270
- Compiler Error CS0304
- Compiler Error CS0310
- Compiler Error CS0311
- Compiler Error CS0413
- Compiler Error CS0417
- Compiler Error CS0433
- Compiler Error CS0445
- Compiler Error CS0446
- Compiler Error CS0504
- 编译器错误 CS0507
- Compiler Error CS0518
- Compiler Error CS0523
- Compiler Error CS0545
- Compiler Error CS0552
- Compiler Error CS0563
- Compiler Error CS0570
- Compiler Error CS0571
- Compiler Error CS0579
- Compiler Error CS0592
- Compiler Error CS0616
- Compiler Error CS0650
- Compiler Error CS0686
- Compiler Error CS0702
- 编译器错误 CS0703
- Compiler Error CS0731
- Compiler Error CS0826
- Compiler Error CS0834
- Compiler Error CS0840
- 编译器错误 CS0843
- Compiler Error CS0845
- Compiler Error CS1001
- Compiler Error CS1009
- Compiler Error CS1018
- Compiler Error CS1019
- Compiler Error CS1026
- Compiler Error CS1029
- Compiler Error CS1061
- Compiler Error CS1112
- 编译器错误 CS1501
- Compiler Error CS1502
- Compiler Error CS1519
- Compiler Error CS1540
- Compiler Error CS1546
- Compiler Error CS1548
- Compiler Error CS1564
- Compiler Error CS1567
- Compiler Error CS1579
- Compiler Error CS1612
- Compiler Error CS1614
- Compiler Error CS1640
- Compiler Error CS1644
- Compiler Error CS1656
- Compiler Error CS1674
- Compiler Error CS1703
- Compiler Error CS1704
- Compiler Error CS1705
- Compiler Error CS1708
- Compiler Error CS1716
- 编译器错误 CS1721
- Compiler Error CS1726
- Compiler Error CS1729
- Compiler Error CS1919
- Compiler Error CS1921
- Compiler Error CS1926
- Compiler Error CS1933
- Compiler Error CS1936
- Compiler Error CS1941
- Compiler Error CS1942
- Compiler Error CS1943
- Compiler Error CS1946
- 编译器错误 CS2032
- Compiler Warning (level 1) CS0420
- Compiler Warning (level 1) CS0465
- Compiler Warning (level 1) CS1058
- Compiler Warning (level 1) CS1060
- Compiler Warning (level 1) CS1598
- Compiler Warning (level 1) CS1607
- Compiler Warning (level 1) CS1616
- Compiler Warning (level 1) CS1658
- Compiler Warning (level 1) CS1683
- Compiler Warning (level 1) CS1685
- Compiler Warning (level 1) CS1690
- Compiler Warning (level 1) CS1691
- Compiler Warning (level 1) CS1699
- Compiler Warning (level 1) CS1762
- Compiler Warning (level 1) CS1956
- Compiler Warning (level 1) CS3003
- Compiler Warning (level 1) CS3007
- Compiler Warning (level 1) CS3009
- 编译器警告(等级 1)CS4014
- Compiler Warning (level 2) CS0108
- 编译器警告(等级 2)CS0467
- Compiler Warning (level 2) CS0618
- Compiler Warning (level 2) CS1701
- Compiler Warning (level 3) CS0675
- Compiler Warning (level 3) CS1700
- Compiler Warning (level 4) CS0429
- Compiler Warning (level 4) CS1591
- Compiler Warning (level 4) CS1610
- C# 语言规范