分部类(Partial Classes)

本文介绍了C#2.0中的分部类特性,包括如何使用partial关键字将类定义拆分到多个源文件中,以及分部类在大型项目开发中的实际应用。文章还详细解释了分部类使用的注意事项和限制条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分部类(Partial Classes)
                                      网上淘来的 很好 呵呵~

C# 2.0 可以将类、结构或接口的定义拆分到两个或多个源文件中,在类声明前添加partial关键字即可。

例如:下面的PartialTest

class PartialTest

{

string Str_FieldTest;

int Int_FieldTest;

public void DoTest()

{

Debug.Print("Test");

}

}

可在不同源文件中写成下面形式:

一个文件中写:

partial class PartialTest

{

string Str_FieldTest;

int Int_FieldTest;

}

另一个文件中写:

partial class PartialTest

{

public void DoTest()

{

Debug.Print("Test");

}

}

什么情况下使用分部类?

        处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理(相当于支持并行处理,很实用);

        使用自动生成的源时,无需重新创建源文件便可将代码添加到类中。Visual Studio 在创建Windows 窗体、Web 窗体时都使用此方法。你不用编辑Visual Studio 所创建的文件,便可创建使用这些类的代码。换句话说:系统会自动创建一个文件(一般记录的是窗体及窗体中的控件的属性),另一个或几个文件记录的是用户自己编写的代码。这两部分分开可以使结构显得非常清晰,用户只需关注自己负责的那部分就行了(需要的话,这两部分可以互相调用)。等到了编辑运行的时候,系统会自动将这两部分合成一个文件。

使用Partial需要注意以下一些情况

1.      使用partial 关键字表明可在命名空间内定义该类、结构或接口的其他部分

2.      所有部分都必须使用partial 关键字

3.      各个部分必须具有相同的可访问性,如publicprivate

4.      如果将任意部分声明为抽象的,则整个类型都被视为抽象的

5.      如果将任意部分声明为密封的,则整个类型都被视为密封的

6.      如果任意部分声明继承基类时,则整个类型都将继承该类

7.      各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口

8.      在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用

9.嵌套类型可以是分部的,即使它们所嵌套于的类型本身并不是分部的也如此。如下所示:

class Container

{

  partial class Nested

 {

void Test1();

}

partial class Nested

{

 void Test2();

}

}

使用分布类的一些限制:

1.    要作为同一类型的各个部分的所有分部类型定义都必须使用partial 进行修饰。如下所示:

public partial class A { }

public class A { } // Error, must also be marked partial

2.  partial 修饰符只能出现在紧靠关键字classstruct interface前面的位置(枚举或其它类型都不能使用partial);

3.  要成为同一类型的各个部分的所有分部类型定义都必须在同一程序集和同一模块(.exe .dll 文件)中进行定义。分部定义不能跨越多个模块;

4.  类名和泛型类型参数在所有的分部类型定义中都必须匹配。泛型类型可以是分部的。每个分部声明都必须以相同的顺序使用相同的参数名。

转载于:https://www.cnblogs.com/ivy/archive/2008/06/27/1230997.html

### C# 中 `partial` 关键字的用法和含义 #### 含义 在 C# 中,`partial` 是一个修饰符,主要用于支持 **部类** 和 **部方法** 的定义。它允许多个文件中的代码共同组成同一个类或方法,从而提高代码的可维护性和模块化设计能力[^1]。 --- #### 使用场景 1. **部类 (Partial Classes)** 当一个类的定义非常庞大或者由不同的开发者负责不同功能时,可以将其拆为多个文件来管理。通过使用 `partial` 关键字,可以在多个源文件中定义同一类的不同部,在编译时这些部会被合并成一个完整的类[^2]。 #### 示例代码 ```csharp // 文件1: CustomerPart1.cs public partial class Customer { public string Name { get; set; } } // 文件2: CustomerPart2.cs public partial class Customer { public void PlaceOrder(string order) { Console.WriteLine($"Placing order for {order}"); } } // 主程序 class Program { static void Main() { var customer = new Customer(); customer.Name = "John Doe"; customer.PlaceOrder("Laptop"); } } ``` 上述代码展示了如何将 `Customer` 类成两个文件别定义属性和方法,最终它们会合成为一个完整的类实例[^3]。 --- 2. **部方法 (Partial Methods)** 部方法允许在一个部类中声明方法签名,而其具体实现在另一个部类中完成。如果未提供实现,则编译器会在编译阶段自动移除对该方法的所有调用及其本身,这有助于减少不必要的开销[^1]。 #### 示例代码 ```csharp // 部 1 public partial class MyClass { partial void OnSomethingHappened(); public void DoSomething() { // 调用部方法 OnSomethingHappened(); Console.WriteLine("Something is done."); } } // 部 2 public partial class MyClass { partial void OnSomethingHappened() { Console.WriteLine("Something happened."); } } // 测试代码 class Program { static void Main() { MyClass myClass = new MyClass(); myClass.DoSomething(); // 输出两行文字 } } ``` 如果删除第二部中对 `OnSomethingHappened()` 方法的实现,运行结果只会显示 `"Something is done."`,因为编译器已经优化掉了无意义的部方法调用[^1]。 --- #### 注意事项 - 所有带有 `partial` 修饰的部必须位于相同的命名空间下。 - 定义部类部方法时,各部之间需保持一致的名字、泛型参数以及访问修饰符等特性。 - 对于部方法而言,默认情况下它是私有的 (`private`) 并且返回值类型固定为 `void`;因此无法被继承或重写[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值