C中的partial class(部分类)

C中的partial class(部分类)C 2 0 可以将类 结构或接口的定义拆分到两个或多个源文件中 在类声明前添加 partial 关键字即可 例如 下面的 PartialTest 类 classPartial stringStr FieldTest intInt FieldTest publicvoidDo Debug Print Test 可在不同源文件中写成下面形式 一个

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

  1.  使用partial 关键字表明可在命名空间内定义该类、结构或接口的其他部分 
  2.  所有部分都必须使用partial 关键字 
  3.  各个部分必须具有相同的可访问性,如public、private 等 
  4.  如果将任意部分声明为抽象的,则整个类型都被视为抽象的 
  5.  如果将任意部分声明为密封的,则整个类型都被视为密封的 
  6.  如果任意部分声明继承基类时,则整个类型都将继承该类 
  7.  各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口 
  8.  在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用 

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

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

  1. partial 修饰符只能出现在紧靠关键字class、struct 或interface前面的位置(枚举或其它类型都不能使用partial);
  2. 要成为同一类型的各个部分的所有分部类型定义都必须在同一程序集和同一模块(.exe 或.dll 文件)中进行定义。分部定义不能跨越多个模块;
  3. 类名和泛型类型参数在所有的分部类型定义中都必须匹配。泛型类型可以是分部的。每个分部声明都必须以相同的顺序使用相同的参数名。

 partial class扩展功能新思路 

开闭原则:“对修改封闭,对扩展开放”。在面向对象的系统中,通过类的继承实现扩展。.net中提供的partial class提供了扩展类的新思路。

一、应用场景

二、继承方式扩展

三、partial class扩展

四、对比分析

在VS2005中,Form、DataSet都使用了partial class方式,原理和这个一样。但是要将这个原理推广到“业务实体”中,可能在理解上需要有所突破。

使用partial class确实会带来可读性的损失,尤其是一个类分布在很多个文件中的时候,所以文件的命名最好是有一个规范来保证。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233219.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安卓基础(十五)[通俗易懂]

    安卓基础(十五)

    2022年1月28日
    39
  • BP人工神经网络matlab工具箱_matlab神经网络控制

    BP人工神经网络matlab工具箱_matlab神经网络控制自己测试人口预测的matlab实现:x=[54167551965630057482587966026661465628286465365994672076620765859672956917270499725387454276368785348067182992852298717789211908599242093717949749625997542987051000721016541030081…

    2025年9月12日
    3
  • iptable命令参数详解

    iptable命令参数详解###还不够详细,后期补充###开放某端口:iptables-IINPUT-ptcp–dport9000-jACCEPT关闭某端口:iptables-DINPUT-ptcp–dport80-jACCEPT屏蔽某个IP请求:iptables-IINPUT-s192.168.0.1-jDROP(屏蔽单个IP192.168.0.1…

    2022年5月8日
    48
  • 从零开始学习Prometheus监控报警系统[通俗易懂]

    从零开始学习Prometheus监控报警系统[通俗易懂]Prometheus是一个开源的监控报警系统,它被纳入了由谷歌发起的Linux基金会旗下的云原生基金会,并成为仅次于Kubernetes的第二大开源项目。

    2022年6月3日
    31
  • 一步一步学习androidNDK编程(hello world)

    一步一步学习androidNDK编程(hello world)上一篇博客,已经搭建好了windows下的linux环境(cygwine),这次我们试着写一个helloworld。首先需要去android的官网下载android-ndk压缩包,之后解压,进入解压后的目录,我们发现有一个ndk-build的脚本文件,这个脚本文件就是我们用交叉编译的文件。我们通过 “./ndk-build” 来运行该命令,如下图:    因为目前我们没有

    2022年4月19日
    48
  • spring整合Mybatis-plus[通俗易懂]

    spring整合Mybatis-plus[通俗易懂]spring整合Mybatis-plus今天就随便说说spring整合mybatis-plus,就不再搭建一个web项目了,简单做一个测试类。既然是spring,那就少不了各种xxx.xml配置文件。那就先说说配置文件<1>.application-dao.xmldao层的配置,他的核心就是要产生Mapper代理对象 1、数据源的配置<context:prope…

    2022年6月6日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号