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

问题

部分类的用途?

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

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

可以。

相关推荐
wregjru20 小时前
【读书笔记】Effective C++ 条款1~2 核心编程准则
java·开发语言·c++
CreasyChan21 小时前
Unity Shader 入门指南
unity·c#·游戏引擎·shader
lingran__21 小时前
C语言自定义类型详解 (1.1w字版)
c语言·开发语言
村口曹大爷21 小时前
JDK 24 正式发布:性能压轴,为下一代 LTS 铺平道路
java·开发语言
ysdysyn1 天前
C# Modbus RTU 多从站控制全攻略:一端口,双轴控制
开发语言·c#·mvvm·通讯·modbus rtu
hashiqimiya1 天前
java程序的并发
java·开发语言·python
微露清风1 天前
系统性学习C++进阶-第十四讲-二叉搜索树
开发语言·c++·学习
董世昌411 天前
强制类型转换和隐式类型转换的区别
开发语言
Fruiticecake1 天前
Markdown,不用鼠标也能做笔记!
开发语言
TypingLearn1 天前
2026年,让.NET再次伟大
windows·c#·.net·sdk·netcore