C#13、什么是部分类

不常用。

在 C# 中,部分类(Partial Class) 是指一个类的定义可以分散在多个文件中,编译时 C# 编译器会自动将它们合并成一个完整的类。

这是通过 partial 关键字实现的,主要用于代码组织、自动生成代码与手动代码分离等场景。


✅ 1. 基本语法

使用 partial 修饰符:

复制代码
// 文件:Person1.cs
public partial class Person
{
    public string Name { get; set; }
    public void SayHello()
    {
        Console.WriteLine($"Hello, I'm {Name}");
    }
}

// 文件:Person2.cs
public partial class Person
{
    public int Age { get; set; }
    public void PrintAge()
    {
        Console.WriteLine($"I am {Age} years old.");
    }
}

✅ 编译后,这两个部分会被合并成一个完整的 Person 类,包含 NameAgeSayHello()PrintAge()


✅ 2. 为什么需要部分类?

场景 1:代码生成器 + 手动代码分离
  • 比如 Windows Forms、WPF、Entity Framework 等工具会自动生成代码。
  • 如果你直接修改生成的代码,下次重新生成时会被覆盖。
  • 使用 partial,你可以把自动生成的部分和自己写的逻辑分开。
示例:Windows Forms
复制代码
// Form1.Designer.cs(自动生成,不要手动改)
partial class Form1
{
    private Button button1;
    private void InitializeComponent() { ... }
}

// Form1.cs(你自己写的逻辑)
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent(); // 调用 Designer 中的方法
        button1.Click += (s, e) => MessageBox.Show("Clicked!");
    }
}

💡 两个文件中的 Form1 是同一个类!


场景 2:大型类拆分,提高可维护性
  • 如果一个类有上千行代码,可以按功能拆到多个文件中。
  • 比如:UserService.Validation.csUserService.Database.cs 等。

✅ 3. 使用规则(重要!)

规则 说明
所有部分必须用 partial 修饰 否则编译器认为是不同类
所有部分必须在同一程序集(项目)中 不能跨项目拆分
访问修饰符必须一致 比如不能一部分是 public,另一部分是 internal
继承关系必须一致 如果某一部分继承了基类或实现了接口,其他部分不能重复声明(但可以补充接口)
泛型参数必须相同 partial class MyList<T> 的所有部分都要有 <T>
✅ 正确示例(继承):
复制代码
// Part1.cs
public partial class Student : Person
{
    public string StudentId;
}

// Part2.cs
public partial class Student // 不需要再写 : Person
{
    public void Study() { }
}

第二部分不需要重复写基类,但整个类最终是 Student : Person


✅ 4. 也可以用于其他类型

partial 不仅可用于 class,还可用于:

  • struct

  • interface

  • 方法(C# 13 预览版支持,但目前主流是类/结构/接口)

    public partial struct Point { ... }
    public partial interface ILogger { ... }


🚫 常见误区

误区1partial 是为了"运行时动态组合类"

正解partial 只在编译时生效,运行时就是一个普通类。

误区2 :可以在不同项目中拆分类

正解 :所有 partial 部分必须在同一个项目(程序集) 中。


✅ 小结

特点 说明
关键字 partial
作用 将一个类的定义拆到多个文件
主要用途 分离自动生成代码 & 手写代码、拆分大型类
编译结果 合并为一个完整类
适用类型 classstructinterface

问题

部分类的用途?

是将大类拆分更多部分,当许多程序员共同开发这个类时特别有用。

是否可以创建部分类结构体

可以。

相关推荐
忧郁的橙子.2 小时前
二、Rabbit MQ 高级
java·开发语言
谢尔登2 小时前
原型理解从入门到精通
开发语言·javascript·原型模式
百锦再3 小时前
第15章 并发编程
android·java·开发语言·python·rust·django·go
864记忆3 小时前
Qt QML 模块及其函数详解
开发语言·qt
无敌最俊朗@3 小时前
C++ 对象布局之padding(填充字节)
开发语言·c++
共享家95273 小时前
高级IO-poll
开发语言·操作系统·io
Chiang木4 小时前
C++进阶:coroutine 协程
开发语言·c++·协程
ivy159868377154 小时前
JM20329是一款高性能、低功耗的USB桥接芯片,实现串行接口(如SATA、IDE)与USB接口之间的数据转换。
c语言·开发语言·ide·嵌入式硬件·eureka·音视频·视频编解码
渡我白衣4 小时前
深入 Linux 内核启动:从按下电源到用户登录的全景解剖
java·linux·运维·服务器·开发语言·c++·人工智能