添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

C# 中的partial 关键字详解

作者:wumingxiaoyao

这篇文章主要介绍了C# 中的partial 关键字,partial 关键字用于拆分一个类、一个结构、一个接口或一个方法的定义到两个或更多的文件中,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下

partial 关键字用于拆分一个类、一个结构、一个接口或一个方法的定义到两个或更多的文件中。 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来。在设计 Framework 时,可以充分利用 partial 这个特性。

什么情况下需要拆分类定义呢?

  • 处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理。
  • 当使用自动生成的源文件时,你可以添加代码而不需要重新创建源文件。 Visual Studio 在创建 Windows 窗体、Web 服务包装器代码等时会使用这种方法。 你可以创建使用这些类的代码,这样就不需要修改由 Visual Studio 生成的文件。
  • 使用源生成器在类中生成附加功能时。

Coords 类 分部在 2 个文件中定义。

CoordsOne.cs
定义了 Coords 类的构造函数
注意签名 partial class Coords

namespace ConsoleApp1.PartialClass
    public partial class Coords
        private int x;
        private int y;
        public Coords(int x, int y)
            this.x = x;
            this.y = y;

CoordsTwo.cs
定义了 Coords 类的一个方法
注意签名 partial class Coords

namespace ConsoleApp1.PartialClass
    public partial class Coords
        public void PrintCoords()
            Console.WriteLine("Coords: {0},{1}", x, y);

TestPartial.cs
测试一下上面的分部类

using ConsoleApp1.PartialClass;
namespace ConsoleApp1
    internal class TestPartial
        static void Main(string[] args)
            Coords coords = new Coords(10, 20);
            coords.PrintCoords();

Coords: 10,20

partial 分部限制

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

  • 要作为同一类型的各个部分的所有分部类型定义都必须使用 partial 进行修饰。

例如,下面的类声明会生成错误:

public partial class A { }
//public class A { }  // Error, must also be marked partial
  • partial 修饰符只能出现在紧靠关键字 classstructinterface 前面的位置。
  • 分部类型定义中允许使用嵌套的分部类型,如下面的示例中所示:
partial class ClassWithNestedClass
    partial class NestedClass { }
partial class ClassWithNestedClass
    partial class NestedClass { }

要成为同一类型的各个部分的所有分部类型定义都必须在同一程序集和同一模块(.exe 或 .dll 文件)中进行定义。 分部定义不能跨越多个模块。经测试这些分部的文件必须在同一命名空间
还是上面的例子,CoordsThree.cs 也定义成 partial 类,但是相比 CoordsOne.csCoordsTwo.cs 不是在同一个命名空间,会出错。

  • 类名和泛型类型参数在所有的分部类型定义中都必须匹配。 泛型类型可以是分部的。 每个分部声明都必须以相同的顺序使用相同的参数名。
  • 如果某关键字出现在一个分部类型定义中,则该关键字不能与在同一类型的其他分部定义中指定的关键字冲突:public,private,protected,internal,abstract,sealed 等

将 CoordsOne.cs 中 public 改成 internal,产生访问属性冲突。

分部接口和结构

同理,也可以开发分部结构和接口

partial interface ITest
    void Interface_Test();
partial interface ITest
    void Interface_Test2();
partial struct S1
    void Struct_Test() { }
partial struct S1
    void Struct_Test2() { }

分部方法在分部类型的一部分中定义了签名,并在该类型的另一部分中定义了实现。 通过分部方法,类设计器可提供与事件处理程序类似的方法挂钩,以便开发者决定是否实现。 如果开发者不提供实现,则编译器在编译时删除签名。 以下条件适用于分部方法:

  • 声明必须以上下文关键字 partial 开头。
  • 分部类型各部分中的签名必须匹配。
  • 构造函数、终结器、重载运算符、属性声明或事件声明中不允许使用 partial 关键字。
namespace PM
    partial class A
        partial void OnSomethingHappened(string s);
    // This part can be in a separate file.
    partial class A
        // Comment out this method and the program
        // will still compile.
        partial void OnSomethingHappened(String s)
            Console.WriteLine("Something happened: {0}", s);

在以下情况下,不需要使用分部方法即可实现:

  • 没有任何可访问性修饰符(包括默认的 专用)。
  • 返回 void。
  • 没有任何输出参数。
  • 没有以下任何修饰符:virtual、override、sealed、new 或 extern。

this 和 partial 的区别

C# - this 的用法 一文中有介绍 this 具有扩展类方法的功能,那么 thispartial 有区别是?

  • 概念的区别,this 是对原有功能进行扩展,partial 是将整体分成多个部分存放,便于维护。
  • 实现方式的区别

patial 分部的签名要求一致,必须是 partial class/interface/struct Name,文件名不一样。
this 扩展类名不一样,但必须是静态的类,静态的方法,方法第一个参数必须是 this ClassName

  • 调用的区别

partial 分部的各个文件必须在同一 namespace 命名空间
this 扩展可以在不同命名空间,但是需要导入扩展的 namespace 命名空间后才能调用扩展的方法。

到此这篇关于C# 中的partial 关键字的文章就介绍到这了,更多相关C# partial 关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • ftp服务器搭建部署与C#实现ftp文件的上传的示例
    ftp服务器搭建部署与C#实现ftp文件的上传的示例
    2022-07-07
  • C#中Attribute特性的用法
    C#中Attribute特性的用法
    2022-07-07
  • C# Any()和AII()方法的区别
    C# Any()和AII()方法的区别
    2022-06-06
  • C#面向对象编程中接口隔离原则的示例详解
    C#面向对象编程中接口隔离原则的示例详解
    2022-07-07
  • C# 中的partial 关键字详解
    C# 中的partial 关键字详解
    2022-07-07
  • C#实现常见加密算法的示例代码
    C#实现常见加密算法的示例代码
    2022-07-07
  • C#数据库操作的示例详解
    C#数据库操作的示例详解
    2022-07-07
  • c#解析jobject的数据结构
    c#解析jobject的数据结构
    2022-07-07
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号