028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Partial怎么在C#中使用-创新互联

今天就跟大家聊聊有关Partial怎么在C#中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

创新互联是一家专注于成都网站制作、成都网站建设与策划设计,兴宁网站建设哪家好?创新互联做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:兴宁等地区。兴宁做网站价格咨询:13518219792

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");
  }
}

一、什么情况下使用分部类?

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

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 修饰符只能出现在紧靠关键字class、struct 或interface前面的位置(枚举或其它类型都不能使用partial);

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

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

四、应用场景

可以使用partial class的场景很多。这里分析一个ORM的例子。系统中有一个Cat类,属性ID、Age、Weight都需要存储到数据库中,一个信息系统中常见的需求。通过读取数据库的结构,可以用工具生成Cat类的代码。并且ORM框架支持了从数据库信息生成Cat对象。

现在的Cat什么动作都没有,客户说,我们需要一个Miaow()的函数。这时就需要对ORM生成的Cat类进行扩展了。可以肯定地一点是,我们不能修改自动生成的代码,因为这会牵涉到数据库结构与代码同步的问题。解决这个需求有两种方法:继承方式扩展,partial class扩展。

1、继承方式扩展


工具自动生成一个CatBase类,这个类只有属性,嵌入到ORM框架中。既然需要扩展功能,很容易想到对这个基类继承,于是有了Cat类。Cat类如愿以偿地有了Miaow()函数。以前系统中用的是CatBase的实例,现在创建CatBase实例的地方需要改为创建Cat的实例。这个问题让ORM框架解决吧。客户的需求实现了,我们自己的代码生成也没有遭到破坏,任务完成。

2、partial class扩展


partial class简单地说就是可以将一个类的代码写到两个或多个代码文件中。编译器在编译的过程中将这几个文件组合起来一起编译。一个很酷的技术。工具生成的Cat类仍然不变。既然需要增加函数,那么在新建一个代码文件,将Miaow()函数写出来就可以。需要做的仅仅是将类的声明由class改为partial class,任务完成。

3、对比分析


两种思路都可以实现需求。孰优孰劣需要仔细分析一下。

看完上述内容,你们对Partial怎么在C#中使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


文章题目:Partial怎么在C#中使用-创新互联
本文地址:http://www.tsicrk.com/article/jghic.html

其他资讯

让你的专属顾问为你服务

1.8408s