我想知道是否有人可以概述我为何要使用它们以及我在这个过程当中会得到什么好处。 数据库
确实,Partial Class用于自动代码生成,一个用途能够维护一个可能有数千行代码的大类文件。 你永远不会知道你的班级可能最终有10万行,你不想建立一个具备不一样名称的新类。 编程
public partial class Product { // 50 business logic embedded in methods and properties.. } public partial class Product { // another 50 business logic embedded in methods and properties.. } //finally compile with product.class file.
另外一种可能的用途多是,不止一个开发人员能够在同一个类上工做,由于它们存储在不一样的地方。 人们可能会笑,但你永远不会知道它有时会不多。 安全
public partial class Product { //you are writing the business logic for fast moving product }
public partial class Product { // Another developer writing some business logic... }
但愿它有意义! 编辑器
大多数人都认为partial
应该只用于具备生成代码文件或接口的类。 我不一样意,这就是缘由。 函数
举一个例子,让咱们看看C#System.Math类......那是类 。 我不会尝试将70多种方法所有放入同一个代码文件中。 维持这将是一场噩梦。 布局
将每一个数学方法放入单独的部分类文件中,并将全部代码文件放入项目中的Math文件夹中,组织将更加清晰。 this
对于具备大量不一样功能的许多其余类,一样能够/将会成立。 例如,用于管理PrivateProfile API的类可能会经过在单个项目文件夹中拆分为一组干净的部分类文件而受益。 spa
就我的而言,我还将大多数人称之为“帮助”或“实用程序”类的内容拆分为每一个方法或方法功能组的单独部分文件。 例如,在一个项目中,字符串助手类有近50种方法。 即便使用区域,这将是一个长期笨拙的代码文件。 对每种方法使用单独的部分类文件进行维护要容易得多。 设计
在执行此操做时,我会当心使用部分类并在整个项目中保持全部代码文件布局的一致性。 例如将任何类公共枚举和类私有成员放入文件夹中的Common.cs或相似命名的文件中,而不是将它们分散到文件中,除非它们仅特定于包含它们的部分文件。 code
请记住,将类拆分为单独的文件时,您也没法使用文本编辑器拆分器栏,以便同时查看当前文件的两个不一样部分。
仅部分方法声明即便代码仅使用方法声明进行编译,而且若是不存在该方法的实现,编译器也能够安全地删除该段代码,而且不会发生编译时错误。
验证点4.只需建立一个winform项目并在Form1构造函数后面包含这一行并尝试编译代码
partial void Ontest(string s);
在实现部分类时,须要考虑如下几点: -
部分类跨越多个文件。
How can you use the partial modifier on a C# class declaration?
使用partial,您能够将类物理地分红多个文件。
这一般由代码生成器完成。
例
使用普通的C#类,您没法在同一项目中的两个单独文件中声明一个类。
可是使用partial修饰符,你能够。
若是一般编辑一个文件而另外一个文件是机器生成的或不多编辑,则此功能很是有用。
An Example will clear your concept.
class Program { static void Main() { A.A1(); A.A2(); } } //Contents of file A1.cs: C# using System; partial class A { public static void A1() { Console.WriteLine("A1"); } } //Contents of file A2.cs: C# using System; partial class A { public static void A2() { Console.WriteLine("A2"); } } Output A1 A2
这里须要部分。
If you remove the partial modifier, you will get an error containing this text: [The namespace '<global namespace>' already contains a definition for 'A'].
提示:要解决此问题,您可使用partial关键字,也能够更改其中一个类名。
How does the C# compiler deal with partial classes?
若是您反汇编上述程序,您将看到文件A1.cs和A2.cs被删除。
你会发现A级存在。
IL反汇编程序因此:类A将在同一代码块中包含方法A1和A2。 这两个类合并为一个。
A1.cs和A2.cs的编译结果:C#
internal class A { // Methods public static void A1() { Console.WriteLine("A1"); } public static void A2() { Console.WriteLine("A2"); } }
摘要
部分类能够简化某些C#编程状况。
在建立Windows窗体/ WPF程序时,它们一般在Visual Studio中使用。
机器生成的C#代码是独立的。
或者你能够在这里找到整个描述。
如下列出了部分类的一些优势。
您能够将UI设计代码和业务逻辑代码分开,以便于阅读和理解。 例如,您正在使用Visual Studio开发Web应用程序并添加新的Web表单,而后有两个源文件“aspx.cs”和“aspx.designer.cs”。 这两个文件与partial关键字具备相同的类。 “.aspx.cs”类具备业务逻辑代码,而“aspx.designer.cs”具备用户界面控制定义。
使用自动生成的源时,能够将代码添加到类中,而无需从新建立源文件。 例如,您正在使用LINQ to SQL并建立DBML文件。 如今,当您拖放表时,它会在designer.cs中建立一个部分类,而且全部表列都具备该类中的属性。 您须要此表中的更多列才能在UI网格上绑定,但您不但愿向数据库表添加新列,所以您能够为此类建立一个单独的源文件,该文件具备该列的新属性,它将是一个偏僻的阶级。 这确实会影响数据库表和DBML实体之间的映射,但您能够轻松得到额外的字段。 这意味着您能够本身编写代码而不会弄乱系统生成的代码。
多个开发人员能够同时为该类编写代码。
您能够经过压缩大型类来更好地维护应用程序。 假设您有一个具备多个接口的类,所以您能够根据接口实现建立多个源文件。 易于理解和维护源文件具备部分类的接口。