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 类,包含 Name、Age、SayHello() 和 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.cs、UserService.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 { ... }


🚫 常见误区

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

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

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

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


✅ 小结

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

问题

部分类的用途?

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

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

可以。

相关推荐
波力海苔夹心脆67515 分钟前
VisionMaster 两级位置修正实战:塑料外壳与金属件装配角度检测
经验分享·计算机视觉·c#·visionmaster·海康机器人·位置修正
FRing0333 分钟前
JavaScript入门到精通二十四(正则表达式、元字符、修饰符)
开发语言·前端·javascript·正则表达式
西索斯coding38 分钟前
Grok 4.7 调用一直 401 怎么办?不是 Key 过期,是 Authorization 头格式问题——排查全流程 + 修复示例
服务器·开发语言·ai·php
SEO_juper1 小时前
hreflang 审计工具:外贸多语言站谷歌SEO的隐性杀手
开发语言·人工智能·爬虫·python·seo
WJ.Polar1 小时前
final、单例类、枚举类、抽象类、接口
java·开发语言
小羊没烦恼!2 小时前
C#综合揭秘——Entity Framework 并发处理详解
java·开发语言·前端·javascript·数据库·mysql·c#
艾iYYY2 小时前
【无标题】
linux·开发语言·网络·操作系统
NetX行者2 小时前
Rust 初体验:一个全栈工程师的编译器“毒打“笔记
开发语言·笔记·rust
我就是不信3 小时前
Java8 lambda 表达式 forEach 如何提前终止?
开发语言·windows·python
Cx330❀3 小时前
深入浅出 Qt 绘图机制:从 QPainter 到四大图像类解析
开发语言·qt·ui·性能优化·图形渲染