温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Partial怎么在C#中使用

发布时间:2021-01-15 14:26:22 来源:亿速云 阅读:159 作者:Leah 栏目:开发技术

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

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需要注意以下一些情况

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

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

  • 各个部分必须具有相同的可访问性,如public、private 等

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

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

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

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

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

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

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 class更加简洁。

  • 系统复杂度:对于系统来说,partial class方式下只存在一个类,而继承方式有两个类。

  • 继承逻辑:从逻辑上讲,Cat并不需要一个基类CatBase,这样做仅仅是因为在代码构建过程中的一个限制。

  • 维护性:两种方式下都会存在两个代码文件,维护成本并没有区别。

  • 可读性:两个Cat文件确实让人费解。

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI