C# partial关键字说明

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

1. 什么是局部类型?

C# 2.0 引入了局部类型的概念。局部类型允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。

局部类型适用于以下情况:

(1) 类型特别大,不宜放在一个文件中实现。
(2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。
(3) 需要多人合作编写一个类。

局部类型是一个纯语言层的编译处理,不影响任何执行机制——事实上C#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类。

public partial class Program
{
static void Main(string[] args)
{
}
}
partial class Program
{
public void Test()
{
}
}

2. 局部类型的限制

(1) 局部类型只适用于类、接口、结构,不支持委托和枚举。

(2) 同一个类型的各个部分必须都有修饰符 partial。

(3) 使用局部类型时,一个类型的各个部分必须位于相同的命名空间中。

(4) 一个类型的各个部分必须被同时编译。

3. 局部类型的注意点

(1) 关键字partial是一个上下文关键字,只有和 class、struct、interface 放在一起时才有关键字的含义。因此partial的引入不会影响现有代码中名称为partial的变量。

(2) 局部类型的各个部分一般是分开放在几个不同的.cs文件中,但C#编译器允许我们将他们放在同一文件中。

4. 局部类型的应用特性

在局部类型上的特性具有“累加”效应。

[Attribute1, Attribute2("Hello")]
partial class Class1{}
[Attribute3, Attribute2("Exit")]
partial class Class1{}

相当于

[Attribute1, Attribute2("Hello"), Attribute3, Attribute2("Exit")]
class Class1 {}

注:Attribute2属性允许在类上多次使用。

5. 局部类型上的修饰符

(1) 一个类型的各个部分上的访问修饰符必须维持一致性。
(2) 如果一个类型有一个部分使用了abstract修饰符,那么整个类都将被视为抽象类。
(3) 如果一个类型有一个部分使用了 sealed 修饰符,那么整个类都将被视为密封类。
(4) 一个类的各个部分不能使用相互矛盾的修饰符,比如不能在一个部分上使用abstract,又在另一个部分上使用sealed。

6. 局部类型的基类和接口

(1) 一个类型的各个部分上指定的基类必须一致。某个部分可以不指定基类,但如果指定,则必须相同。
(2) 局部类型上的接口具有“累加”效应。

partial class Class2: Iinterface1, Iinterface2 {}
partial class Class2: Iinterface3 {}
partial class Class2: Iinterface2 {}

相当于

class Class2: Iinterface1, Iinterface2, Iinterface3 {}

把所有的源代码作为一个类型保存在一个单独的文件里是一个好的编程习惯,但有时候一个类型变得过于庞大以至于这样做成为一个不切实际的约束。此外,编程人员经常使用源代码生成器来产生一个应用程序的初始结构,然后再修改产生的代码。不幸的是,当源代码在将来某个时候再次发布时,已存在的修改就要被覆盖了。

Partial types允许把类,结构和接口打破为多个代码碎片存在不同的源代码文件,以便于简化开发和维护。加之partial types允许机器产生的和用户编写的类型部分分离,这样就可以方便增加工具产生的代码。

Partial,是一个新的类型修饰符,在把一个类型定义在多个部分的时候使用。下面是一个partial class的示例,以两个部分实现。这两个部分可能在两个不同的源代码文件,比如说第一个部分是由一个数据库映射工具产生的,而第二个部分是手工编写的。

public partial class Customer
{
private int id;
private string name;
private string address;
private List<Order> orders;
public Customer() {
}
}
public partial class Customer
{
public void SubmitOrder(Order order) {
orders.Add(order);
}
public bool HasOutstandingOrders() {
return orders.Count > 0;
}
}

当上面的两个部分在一起编译,结果产生的代码就好像这个类是写在一个单元里一样。

public class Customer
{
private int id;
private string name;
private string address;
private List<Order> orders;
public Customer() {
}
public void SubmitOrder(Order order) {
orders.Add(order);
}
public bool HasOutstandingOrders() {
return orders.Count > 0;
}
}

一个partial type的所有部分必须在一起编译,这样所有的部分才能在编译的时候整合在一起。特别的是partial types不允许加入已经编译好的类型。

以上所述是小逼给大家介绍的C# partial关键字说明,希望对大家有所帮助!

(0)

相关推荐

  • C# Partial:分部方法和分部类代码实例

    using System; namespace Partial { class Program { static void Main(string[] args) { A a = new A(); } } partial class A { public A() { PrintHello(); PrintWorld(); Console.Read(); } partial void PrintHello() { Console.Write("Hello"); } } partial c

  • C#中partial关键字的作用

    1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不宜放在一个文件中实现. (2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起. (3) 需要多人合作编写一个类. 局部类型是一个纯语言层的编译处理,不影响任何执行机制--事实上C#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类. public partia

  • C#中Html.RenderPartial与Html.RenderAction的区别分析

    本文较为详细的讲解了C#中Html.RenderPartial与Html.RenderAction的区别,具体分析如下: Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. Html.RenderPartial是直接将用户控件嵌入到界面上: 在页面直接渲染 视图结果  视图必须存在! <%Html.RenderPartial("LogOnUserControl");%> 或 <%Html.RenderPa

  • 详解C# partial 关键字的使用

    什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不宜放在一个文件中实现. (2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起. (3) 需要多人合作编写一个类. 例: 在同一命名空间下  在class2类中   写class2 的实例 加关键字 partial 在class3类中   写class2 的实例 加关键字 pa

  • C# partial关键字说明

    C# 中可以将类.结构或接口的定义拆分到两个或多个源文件中,在类声明前添加partial关键字即可. 1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不宜放在一个文件中实现. (2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起. (3) 需要多人合作编写一个类. 局部类型是一个纯语言层的编译处理,不影响任何执行机制-

  • C# 中的partial 关键字详解

    目录 引言 分部类 partial 分部限制 分部接口和结构 分部方法 this 和 partial 的区别 引言 partial 关键字用于拆分一个类.一个结构.一个接口或一个方法的定义到两个或更多的文件中. 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来.在设计 Framework 时,可以充分利用 partial 这个特性. 分部类 什么情况下需要拆分类定义呢? 处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理. 当使用自动生成的源文

  • C#基础知识之Partial的使用

    C# 2.0 可以将类.结构或接口的定义拆分到两个或多个源文件中,在类声明前添加partial关键字即可. 例如:下面的PartialTest类 class PartialTest { string Str_FieldTest; int Int_FieldTest; public void DoTest() { Debug.Print("Test"); } } 可在不同源文件中写成下面形式: 一个文件中写: partial class PartialTest { string Str_

  • C#中分部类和分部方法的应用

    分部类(Partial Class)在C#2.0引入,分部方法(Partial Method)在C#3.0引入,这两个语法特性都具有相同的特性:将类(或)方法的代码分散在多个地方. 1.分部类的特性和应用 1.1分部类的定义 在定义一个类时,加上partial关键字,此类即成为分部类. 分部类允许将一个类的代码分散于一个以上的源代码文件中. Person.cs代码如下 复制代码 代码如下: namespace PartialClassDemo1 {     public partial clas

  • 重温C# clr 笔记总结

    1: .net framework 由两个部分组成:CLR 和 FCL. 2:在CLR中,所有错误都是通过异常来报告的. 3:智能感知功能主要是靠解析元数据实现的. 4:允许在不同语言之间方便的切换,并对各种语言进行紧密集成是CLR的出色特性. 5:一个方法只有在首次运行时才会由于jit造成一定的性能损失,以后对该方法的调用都以本地代码的形式全速运行. 6:方法签名指定了参数的数量(及其顺序),参数的类型:方法是否有返回值,如果有返回值,还要指定返回值的类型. 7:无论使用哪一种语言,类型的行为

  • 解析C#中的分部类和分部方法

    可以将类或结构.接口或方法的定义拆分到两个或多个源文件中.每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来. 分部类 在以下几种情况下需要拆分类定义: 处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理. 使用自动生成的源时,无需重新创建源文件便可将代码添加到类中.Visual Studio 在创建 Windows 窗体.Web 服务包装代码等时都使用此方法.无需修改 Visual Studio 创建的文件,就可创建使用这些类的代码. 若要拆分

  • 一个C#开发者重温C++的心路历程

    前言 这是一篇C#开发重新学习C++的体验文章. 作为一个C#开发为什么要重新学习C++呢?因为在C#在很多业务场景需要调用一些C++编写的COM组件,如果不了解C++,那么,很容易...注定是要被C++同事忽悠的. 我在和很多C++开发者沟通的时候,发现他们都有一个非常奇怪的特点,都很爱装X,都觉得自己技术很好,还很爱瞧不起人:但如果多交流,会发现更奇怪的问题,他们几乎都不懂代码设计,面向对象和业务逻辑的代码写的也都很烂. 所以,这次重温C++也是想了解下这种奇异现象的原因. C++重温 首先

  • 深入理解C#指针之美

    目录 一.简洁优美的代码 二.C# 指针基础 三.几种常用用法 1.使用Dispose模式管理非托管内存 2.使用 stackalloc 在栈中分配内存 3.模拟C中的union(联合体)类型 四.C# 指针操作的几个缺点 五.引入模板机制 六.迭代器 七.风情万种的Lambda表达式 八.与C/C++的比较 九.接下来的工作 总结 一.简洁优美的代码 本来初稿这节写了好几百字,将C#指针开发与C/C++开发,Java开发.D语言开发等进行对比,阐述理念.不过现在觉得,阐述一个新事物,没有比用例

随机推荐