这是本文档旧的修订版!
C# 系统关键词与修饰符
在 C# 中,修饰符(Modifiers)用于定义类型和成员的访问级别、继承行为以及其他特性。合理使用修饰符是实现封装、多态和代码管理的基础。
关键词速查表
| 关键词 | 含义 | 使用场景 | 为什么要使用 (核心价值) |
|---|---|---|---|
public | 公共的 | 需要对外完全暴露的类、属性或方法 | 开放接口:方便外部模块调用,作为类的对外契约 |
private | 私有的 | 仅在类内部使用的变量或辅助方法 | 封装/安全:隐藏内部实现细节,防止外部随意修改数据 |
protected | 受保护的 | 允许子类访问,但不对外公开 | 继承扩展:允许子类复用或修改父类逻辑,但不暴露给外界 |
internal | 内部的 | 仅在当前项目(Assembly)内可访问 | 组件封装:在同一个DLL内共享,但不对引用该DLL的项目公开 |
static | 静态的 | 属于类本身,而非类的实例 | 全局/工具:无需实例化即可使用,常用于工具类或全局配置 |
sealed | 密封的 | 不能被继承的类,或不能被重写的方法 | 防篡改:确保类的行为固定,防止子类破坏核心逻辑;微小的性能优化 |
partial | 分部的 | 将一个类的代码拆分到多个文件中 | 代码管理:解决单文件代码过长问题;配合代码生成器(如WinForms/WPF)使用 |
abstract | 抽象的 | 只有定义没有实现的类或方法 | 强制规范:定义一个模板,强制子类必须去实现具体逻辑 |
virtual | 虚拟的 | 允许子类重写的方法 | 多态性:提供默认实现,但允许子类根据需要修改行为 |
override | 重写 | 子类重新实现父类的虚方法/抽象方法 | 多态性:覆盖父类行为,实现子类特有的逻辑 |
event | 事件 | 实现事件订阅 | 限制外部访问权限,只给订阅通知权限 |
详细解析与案例
1. 访问修饰符 (public / private)
这是最基础的封装概念。
public class User { // public: 外部可以随意读取和修改(通常建议配合属性使用) public string NickName; // private: 外部无法访问,只能在 User 类内部使用 private string _password; public void SetPassword(string pwd) { // 在类内部可以访问 private 变量 _password = pwd; } }
2. 密封与分部 (sealed / partial)
这是你提到的重点关键词。
sealed (密封) 用于防止类被继承,或者防止方法被进一步重写。
// 这是一个最终版本,不允许其他人再继承修改它 public sealed class FinalLogic { public void DoWork() { ... } } // 错误写法:编译器会报错 // class MyClass : FinalLogic { }
partial (分部) 常用于多人协作或自动生成的代码。
文件 1: Person.Part1.cs
public partial class Person { public string Name { get; set; } }
文件 2: Person.Part2.cs
public partial class Person { public void SayHello() { // 可以直接访问另一部分定义的 Name Console.WriteLine("Hello " + Name); } }
*注:编译时,这两个部分会被合并成一个完整的 `Person` 类。*
3. 多态与继承 (virtual / override / abstract)
这是面向对象编程的核心。
// 父类 public class Animal { // virtual: 允许子类重写这个方法 public virtual void Speak() { Console.WriteLine("动物发出声音"); } } // 子类 public class Dog : Animal { // override: 重写父类的逻辑 public override void Speak() { Console.WriteLine("汪汪汪"); } } // 抽象类案例 public abstract class Shape { // abstract: 我不知道怎么算面积,子类必须自己写 public abstract double GetArea(); }
4. 静态 (static)
静态成员属于类,不属于对象。
public class Tools { // 静态变量:所有实例共享一份 public static double Pi = 3.14159; // 静态方法:直接通过 Tools.Add() 调用 public static int Add(int a, int b) { return a + b; } } // 调用方式 double area = Tools.Pi * 10 * 10; // 不需要 new Tools()