`
yz168083343766
  • 浏览: 9562 次
文章分类
社区版块
存档分类
最新评论

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 {}

....................................................................

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);
    }www.2cto.com
    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不允许加入已经编译好的类型。


作者:niemeiquan

本文固定链接:http://www.verydemo.com/demo_c92_i318586.html

分享到:
评论

相关推荐

    C# partial关键字说明

    C# 中可以将类、结构或接口的定义拆分到两个或多个源文件中,在类声明前添加partial关键字即可,通过本文给大家介绍C# partial关键字说明,需要的朋友参考下

    C# 语言规格说明(English Edition第五版)

    微软内部提供的详细描述C#语言结构和使用的文档,想做高级独立资深开发的不可错误,另外,此文档为英文原文版。建议作为平时学习阅读之用 目录: Table of Contents 1. Introduction 1 1.1 Hello world 1 1.2 ...

    c# program

    b) Use partial classes whenever possible to factor out the maintained portions. 8. 避免利用注释解释显而易见的代码。 a) 代码应该可以自解释。好的代码由可读的变量和方法命名因此不需要注释。 9. ...

    C# 记事本代码

    public partial class Form1 : Form { public Form1() { InitializeComponent(); } // 用于存储当前操作的文件的名称 private string textFileName = ""; private string filePath = ""; private void ...

    DWX-Trickbox:演示代码,如DWX 2015上的演讲“另一篇C#(6.0)技巧盒”中所示

    DWX 2015演示 该存储库包含演示代码,如有关“再看C#(6.0)技巧盒”的演讲中所示。 该代码带有注释。 自述文件还包含有关如何使用/试验某些提示或技巧的... 局部方法(请参阅PartialClass ,两个文件) 参数索引器

    asp.net(c#)ref,out ,params的区别

    示例(拷贝到vs2005中即可用,下面不再说明) 代码如下: public partial class Form1 : Form { public static void UseParams(params int[] list) { string temp = “”; for (int i = 0; i &lt; list.Length; i++)...

    贪吃蛇C#net

    private void 游戏说明ToolStripMenuItem_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.Show(); } //控制游戏的开始、暂停、和退出 public void NoviceControl(int n) { Graphics G =...

    DBEntry.Net 参考手册

    这次把使用说明整理出来,做成CHM格式. DbEntry.Net (Lephone Framework) DbEntry.Net (Lephone Framework) is a lightweight, high performance ORM compnent for .Net 2.0 and 3.5. It has clearly and easily ...

    SubSonic3.0使用Demo1.0——应用了T4模版可减少开发过程中70%以上的代码量以及80%以上的出错率

    由于生成的逻辑类使用了partial这个类修饰符,所以我们还可以定义同名的逻辑类,里面放那些不能用模版来生成的方法,这样生成与自定义的方法分开两个文件处理,就不用有修改后要花大量时间进行复制粘贴修改相关类了...

    无限制语言代码生成器

    1、本生成器采用c#2.0 VS2010编写。可运行的.Net框架版本为2.0,建议运行的框架版本为4.0。 本工具仅仅提供一个“核心”,从各种数据库中获取数据库的全部表结构作为数据源,提供到一个模板引擎中。 模板的格式对...

    ASP.NET 2.0 跟我一起学Visual.Studio2005 1/9

    C# 2.0语法除泛型之外,还新增了例如:分部类、匿名方法、迭代器、可空类型等一系列的新功能,本课程将会介绍近十几个C# 2.0语言和编译器的新增功能,并以实例加以说明。 跟我一起学Visual Studio 2005(4):VS 2005...

    ASP.NET 2.0 跟我一起学Visual.Studio2005 2/9

    C# 2.0语法除泛型之外,还新增了例如:分部类、匿名方法、迭代器、可空类型等一系列的新功能,本课程将会介绍近十几个C# 2.0语言和编译器的新增功能,并以实例加以说明。 跟我一起学Visual Studio 2005(4):VS 2005...

    ondotnet:On.NET演示中使用的演示

    // // uncomment the code below for handling partial failures in code // .AddPolicyHandler(GetRetryPolicy()) // .AddPolicyHandler(GetCircuitBreakerPolicy()); // 使用tye run再次运行示例。 使用Service ...

    ASP.NET的网页代码模型及生命周期

    从上述代码中可以看出,在头部声明的时候,单文件页模型只包含Language=“C#”,而代码隐藏页模型包含了CodeFile=“Default.aspx.cs”,说明被分离出去处理事物的代码被定义在Default.aspx.cs中,示例代码如下所示。...

    经典cookie购物车源码[GridView实现]

    特别说明请注意: 根许多网友反应, using Maticsoft.Functions; 这些代码看不懂 其实Functions 这个dll是我定义常用的函数类,如果需要跟我联系索取http://sql8.net 下面有我的群号, 其中 ArtsShop.Model.Arts_...

Global site tag (gtag.js) - Google Analytics