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 小时前
ArkTS ForEach 参数解析:组件与键值生成器
开发语言·数据库
LiamTuc3 小时前
Java构造函数
java·开发语言
三途河畔人3 小时前
Pytho基础语法_运算符
开发语言·python·入门
Benmao⁢3 小时前
C语言期末复习笔记
c语言·开发语言·笔记·leetcode·面试·蓝桥杯
adsadswee3 小时前
Qt 样式与 QLinearGradient 渐变详解
开发语言·qt·qt样式表·qlineargradient·qss渐变效果
花月C3 小时前
个性化推荐:基于用户的协同过滤算法
开发语言·后端·算法·近邻算法
脾气有点小暴4 小时前
前端页面跳转的核心区别与实战指南
开发语言·前端·javascript
rit84324994 小时前
基于MATLAB的BP神经网络手写数字识别
开发语言·神经网络·matlab
San30.4 小时前
深入 JavaScript 内存机制:从栈与堆到闭包的底层原理
开发语言·javascript·udp
灰灰勇闯IT5 小时前
RN路由与状态管理:打造多页面应用
开发语言·学习·rn路由状态