我想知道是否有人能给我一个概述,为什么我要使用它们,在这个过程中我能获得什么好处。


当前回答

分部类跨越多个文件。

如何在c#类声明中使用分部修饰符?

使用部分类,您可以将一个类物理地分离到多个文件中。这通常由代码生成器完成。

例子

对于普通的c#类,您不能在同一个项目中的两个独立文件中声明一个类。但是对于部分修饰语,你可以。

如果一个文件经常被编辑,而另一个文件是机器生成的或很少被编辑,这是很有用的。

这里有一个例子来说明:

class Program
{
    static void Main()
    {
        A.A1();
        A.A2();
    }
}

A1.cs文件内容:c#

using System;

partial class A
{
    public static void A1()
    {
        Console.WriteLine("A1");
    }
}

A2.cs文件内容:c#

using System;

partial class A
{
    public static void A2()
    {
        Console.WriteLine("A2");
    }
}

输出:

A1
A2

这里需要Partial。

如果你删除了部分修饰符,你将得到一个包含以下文本的错误:

[命名空间'<全局命名空间>'已经包含' a '的定义]。

Tip:

要解决这个问题,可以使用partial关键字,或者更改其中一个类名。

c#编译器如何处理部分类?

如果你分解上面的程序(使用IL Disassembler),你会看到文件A1.cs和A2.cs被删除了。你会发现A类出现了。

类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#代码是独立的。 或者你可以在这里找到完整的描述。

其他回答

作为预编译器指令的替代方案。

如果您使用预编译器指令(即# If DEBUG),那么您最终会看到一些看起来粗糙的代码与实际的Release代码混合在一起。

你可以创建一个单独的分部类来包含这些代码,或者将整个分部类包装在一个指令中,或者省略该代码文件,使其不被发送给编译器(实际上是做同样的事情)。

分部类跨越多个文件。

如何在c#类声明中使用分部修饰符?

使用部分类,您可以将一个类物理地分离到多个文件中。这通常由代码生成器完成。

例子

对于普通的c#类,您不能在同一个项目中的两个独立文件中声明一个类。但是对于部分修饰语,你可以。

如果一个文件经常被编辑,而另一个文件是机器生成的或很少被编辑,这是很有用的。

这里有一个例子来说明:

class Program
{
    static void Main()
    {
        A.A1();
        A.A2();
    }
}

A1.cs文件内容:c#

using System;

partial class A
{
    public static void A1()
    {
        Console.WriteLine("A1");
    }
}

A2.cs文件内容:c#

using System;

partial class A
{
    public static void A2()
    {
        Console.WriteLine("A2");
    }
}

输出:

A1
A2

这里需要Partial。

如果你删除了部分修饰符,你将得到一个包含以下文本的错误:

[命名空间'<全局命名空间>'已经包含' a '的定义]。

Tip:

要解决这个问题,可以使用partial关键字,或者更改其中一个类名。

c#编译器如何处理部分类?

如果你分解上面的程序(使用IL Disassembler),你会看到文件A1.cs和A2.cs被删除了。你会发现A类出现了。

类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"有用户界面控件定义。

When working with automatically generated source, the code can be added to the class without having to recreate the source file. For example you are working with LINQ to SQL and create a DBML file. Now when you drag and drop a table it creates a partial class in designer.cs and all table columns have properties in the class. You need more columns in this table to bind on the UI grid but you don't want to add a new column to the database table so you can create a separate source file for this class that has a new property for that column and it will be a partial class. So that does affect the mapping between database table and DBML entity but you can easily get an extra field. It means you can write the code on your own without messing with the system generated code.

多个开发人员可以同时为类编写代码。

压缩大型类可以更好地维护应用程序。假设您有一个具有多个接口的类,因此您可以根据接口实现创建多个源文件。理解和维护源文件具有部分类的接口是很容易的。

在处理大型类时,或在团队中工作时,尽可能保持所有内容的干净,您可以在不重写的情况下编辑(或始终提交更改)

每当我有一个类,其中包含一个具有重要大小/复杂性的嵌套类时,我将该类标记为partial,并将嵌套类放在一个单独的文件中。我使用规则命名包含嵌套类的文件:[class name]。[嵌套类名].cs。

下面的MSDN博客解释了如何使用带有嵌套类的部分类来实现可维护性:http://blogs.msdn.com/b/marcelolr/archive/2009/04/13/using-partial-classes-with-nested-classes-for-maintainability.aspx