中文 | English | 帮助中心

业务咨询热线:

新闻中心
  • 公司新闻
  • 常见问题
当前位置:首页>>新闻中心新闻中心
通过partial关键字扩展代码生成器生成的代码

2011/4/20 15:55:24     (被阅读5742次)

   partial关键字 C#2.0提供的新关键字,局部类型定义允许将类、结构或接口的定义拆分到多个文件中。
可以将一个class、struct或interface的定义拆分,写在不同的源文件中。每个源文件包含类定义的一部分,编译应用程序时将把所有部分组合起来。

    一般在以下几种情况下需要拆分类定义:

    1.处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理。

    2.使用动软代码生成器自动生成代码时,可以通过partial关键字将自动生成的和我们自己编写的代码分别放在不同的文件里,避免混在一个文件里,也避免了后期重新生成代码后覆盖的问题。

示例如下:

public partial class Employee
{
    
public void DoWork()
  
{}
}

public partial class Employee
{
    
public void GoToLunch()
   
{}
}


    以上代码定义了一个类Employee,该类有两个方法DoWork()和GoToLunch(),你完全可以把以上代码看作是一个类:

public class Employee
{
    
public void DoWork()
   {}
    
public void GoToLunch()
   {}
}

而实际上编译器在编译时也是这么合并的。编译器在编译时会把一个partial类所有的信息放到一起,我们可以再来扩充一下。

假如我们已经定义好了两个接口:

interface IDoSomeThing
{
    
void DoWork();
    
void DoPlay();
}


interface IGoToDinner
{
    
void GoToBreakfast();
    
void GoToLunch();
    
void GoToSupper();
}

我们的类定义如下: 

public partial class Employee : IDoSomeThing
{
    public void DoWork()
    {}

    public void DoPlay()
    {}
}

public partial class Employee : IGoToDinner
{
    public void GoToBreakfast()
   {}

   
    [System.ObsoleteAttribute]
    public void GoToLunch()
    {}

    public void GoToSupper()
    {}
}

于是,在编译时编译器就把以上合并为一个类:

public class Employee : IDoSomeThing, IGoToDinner
{
    public void DoWork()
    {}

    public void DoPlay()
    {}

    public void GoToBreakfast()
    {}

   
    [System.ObsoleteAttribute]
    public void GoToLunch()
    {}

    public void GoToSupper()
    {}
}

这在开发分布式系统时是很有必要的,多个程序员只要分别开发自己的一部分就可以了。

 

分享到:

 

关于我们 | 诚聘英才 | 商务合作 | 常见问题 | 联系我们 | 友情链接 | 意见反馈