`
liss
  • 浏览: 843042 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

类型partial的类是什么样的类呢?

阅读更多

partial类就是说明这个类是写在几个文件里面的,这里只是一部分.

partial是一个类修饰符,用于把类定义拆分为几个部分,便于代码管理,如
class ClassA
{
void A(){;}
void B(){;}
}

partial class ClassA
{
void A(){;}
}
partial class ClassA
{
void B(){;}
}
是一样的

 

 

 

可以将类、结构或接口的定义拆分到两个或多个源文件中。每个源文件包含类定义的一部分,编译应用程序时将把所有部分组合起来。在以下几种情况下需要拆分类定义:

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

使用自动生成的源时,无需重新创建源文件便可将代码添加到类中。Visual Studio 在创建 Windows 窗体、Web 服务包装代码等时都使用此方法。您无需编辑 Visual Studio 所创建的文件,便可创建使用这些类的代码。

若要拆分类定义,请使用 partial 关键字修饰符,如下所示:

C# 复制代码
public partial class Employee
{
public void DoWork()
{
}
}

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

备注

使用 partial 关键字表明可在命名空间内定义该类、结构或接口的其他部分。所有部分都必须使用 partial 关键字。在编译时,各个部分都必须可用来形成最终的类型。各个部分必须具有相同的可访问性,如 public、private 等。

如果将任意部分声明为抽象的,则整个类型都被视为抽象的。如果将任意部分声明为密封的,则整个类型都被视为密封的。如果将任意部分声明为基类型,则整个类型都将继承该类。

指定基类的所有部分必须一致,但忽略基类的部分仍继承该基类型。各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口。在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用。最终类型是所有部分在编译时的组合。

注意
分部修饰符不可用于委托或枚举声明中。


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

C# 复制代码
class Container
{
partial class Nested
{
void Test() { }
}
partial class Nested
{
void Test2() { }
}
}

编译时将对分部类型定义的属性进行合并。例如,下面的声明:

C# 复制代码
[System.SerializableAttribute]
partial class Moon { }

[System.ObsoleteAttribute]
partial class Moon { }

等效于:

C# 复制代码
[System.SerializableAttribute]
[System.ObsoleteAttribute]
class Moon { }

将从所有分部类型定义中对以下内容进行合并:

XML 注释

interfaces

泛型类型参数属性

类属性

成员

例如,下面的声明:

C# 复制代码
partial class Earth : Planet, IRotate { }
partial class Earth : IRevolve { }

等效于:

C# 复制代码
class Earth : Planet, IRotate, IRevolve { }

限制

处理分部类定义时需遵循下面的几个规则:

要作为同一类型的各个部分的所有分部类型定义都必须使用 partial 进行修饰。例如,下面的类声明将生成错误:

C# 复制代码
public partial class A { }
//public class A { } // Error, must also be marked partial

partial 修饰符只能出现在紧靠关键字 class、struct 或 interface 前面的位置。

分部类型定义中允许使用嵌套的分部类型,例如:

C# 复制代码
partial class ClassWithNestedClass
{
partial class NestedClass { }
}

partial class ClassWithNestedClass
{
partial class NestedClass { }
}

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

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

下面的用于分部类型定义中的关键字是可选的,但是如果某关键字出现在一个分部类型定义中,则该关键字不能与在同一类型的其他分部定义中指定的关键字冲突:

public

private

protected

internal

abstract

sealed

基类

new 修饰符(嵌套部分)

一般约束(有关更多信息,请参见类型参数的约束(C# 编程指南)。)

示例 1

下面的示例在一个分部类定义中声明类 CoOrds 的字段和构造函数,在另一个分部类定义中声明成员 PrintCoOrds。

C# 复制代码
public partial class CoOrds
{
private int x;
private int y;

public CoOrds(int x, int y)
{
this.x = x;
this.y = y;
}
}

public partial class CoOrds
{
public void PrintCoOrds()
{
System.Console.WriteLine("CoOrds: {0},{1}", x, y);
}

}

class TestCoOrds
{
static void Main()
{
CoOrds myCoOrds = new CoOrds(10, 15);
myCoOrds.PrintCoOrds();
}
}

输出

CoOrds: 10,15

示例 2

从下面的示例可以看出,您也可以开发分部结构和接口。

C# 复制代码
partial interface ITest
{
void Interface_Test();
}

partial interface ITest
{
void Interface_Test2();
}

partial struct S1
{
void Struct_Test() { }
}

partial struct S1
{
void Struct_Test2() { }
}

分享到:
评论

相关推荐

    垃圾分类“非常混乱”?线上人工智能垃圾分类系统..docx.docx

    同时,用户还可以通过在移动淘宝上搜索“你是什么样的垃圾”来获取智能识别服务。 此外,阿里巴巴的其他平台也推出了相应的垃圾分类工具。支付宝推出了“垃圾分类指南”小程序,用户可以在线搜索垃圾类型;天猫精灵...

    全国第三次土地调查-土地用途及土地编码/土地利用现状分类

    GB/T 21010-2017是《土地利用现状分类》的国家标准,它规定了一套完整的编码系统,每个编码代表一种特定的土地利用类型。编码通常由几位数字组成,每一段数字对应一个分类层级,便于快速查找和分析土地利用信息。 ...

    HttpClientHelper 工具类

    - **泛型类型**:允许将服务器返回的JSON或其他结构化数据自动映射到预先定义的C#类,方便处理和解析。 - **XML**:如果服务器返回XML格式的数据,HttpClientHelper可以提供相应的解析方法,将XML转换为C#对象。 ...

    软件建模技术教程样节_3.2类.pdf

    操作是类所能执行的行为或方法,例如“取书名”、“修改书名”等。操作通常用来实现类的功能。 #### 七、操作的表示 在UML中,操作通常被放在类的下方,以一种特定的语法格式表示,例如: ``` getBookName():...

    面向对象的设计原则——类设计原则

    其中,类设计原则尤为关键,它们指导着开发者如何合理地构建类,以适应不断变化的需求。以下是对给定文件中提及的几个类设计原则的深入探讨。 ### 1. 单一职责原则 单一职责原则强调一个类应该专注于实现单一的...

    操作系统为用户提供三种类型的使用接口

    1.操作系统为用户提供三种类型的使用接口,它们是命令方式和系统调用和图形用户界面。 。

    29 React v16 版的协调算法是什么样的呢?慕课专栏1

    例如,`updateClassComponent`处理类组件,`updateHostRoot`处理根节点,`updateHostComponent`处理普通组件,而`updateHostText`处理文本节点。 在解析过程中,`reconcileChildren`函数起着关键作用,它比较当前...

    山东省2023年春季高考技能测试网络技术类专业样题--发布版.pdf

    "山东省2023年春季高考技能测试网络技术类专业样题--发布版.pdf" 该资源是一个山东省2023年春季高考技能测试网络技术类专业样题,涵盖了网络设备安装与调试、C语言程序设计两个模块。 网络设备安装与调试 该模块...

    类与对象~~~~~~

    值得注意的是,像整数、列表这样的内置数据类型虽然已经由语言提供了实现,但其背后仍然遵循着同样的原则——即类和对象的概念。 #### Python中的类定义 以下是一个简单的Python代码示例,展示了如何定义一个名为`...

    【Java必备知识视频教程】Java中的对象长什么样?

    类是对象的蓝图,它定义了对象的属性和方法的类型和行为。 创建Java对象的过程通常涉及以下几个步骤: 1. **定义类**:通过`class`关键字定义一个类,比如`Person`,并声明它的属性(如`name`,`age`)和方法(如`...

    设计一个学生类Student(学生学号、姓名、数学、英语、计算机成绩;)

    1.设计一个学生类Student。 1)数据成员包括: 学生学号、姓名、数学、英语、c语言成绩;...5)熟悉this指针,测试什么样的成员函数有this指针,什么样的成员函数没有this指针。 6)借助student类验证常对象、常成员以及

    中国100万植被类型空间分布数据-veg.rar

    【植被类型空间分布数据详解】 植被类型空间分布数据是地理信息系统(GIS)中重要的环境科学数据,它提供了关于地球表面植被覆盖类型的信息,是研究生态学、气候学、土地利用和环境保护等领域不可或缺的基础资料。...

    什么样的连接算是好连接

    ### 什么样的连接算是好连接 在SEO领域内,“什么样的连接算是好连接”是一个非常关键的问题。良好的连接不仅可以提升网站的可见度与权重,还能有效提高搜索引擎排名,进而带来更多的流量和潜在客户。以下是对该...

    软件测试面试题.pdf

    8. 缺陷生命周期是什么样的? 9. 什么是测试用例?一个好的测试用例应包含哪些内容? 10. 什么是测试计划? ### 测试类型 11. 描述单元测试和集成测试的区别。 12. 什么是系统测试? 13. 什么是验收测试(UAT)? ...

    java存储oracle中的clob类型

    在Java编程中,为了能够有效地与Oracle数据库中的CLOB类型交互,Java提供了`java.sql.Clob`类作为接口。 **1. CLOB的读取方法** - **getCharacterStream()**:返回一个`java.io.Reader`对象,按照Unicode编码读取...

    Java常用类源码

    在Java编程语言中,了解和研究常用类的源码对于提升编程技能至关重要。Java的类库丰富多样,包含了大量预定义的类,这些类提供了许多基础功能,方便开发者快速构建应用程序。本文将深入探讨几个Java中常用的类,包括...

    simulacrum, 在 Scala 中,类型类的第一类语法支持.zip

    simulacrum, 在 Scala 中,类型类的第一类语法支持 三维图形 类型为类岩石,它们在 Scala 中的编码需要很多样板,它不是岩石。 项目之间存在不一致,其中类型类的编码方式不同。 在项目中存在不一致,其中面向对象的...

    Java中的类、抽象类和接口的区别和联系[参考].pdf

    首先,我们来理解什么是类。类是面向对象编程的基础,它是一个模板或者蓝图,用于创建具有相同属性(字段)和行为(方法)的对象。在Java中,我们可以定义一个类来描述现实世界中的实体,如上面的`Student`类。类...

Global site tag (gtag.js) - Google Analytics