在 C# 语言中,成员修饰符(Modifier) 用于描述类型或成员的可访问性、实现方式、继承能力以及生命周期。
无论是基础语法学习、工程开发,还是面试考察,成员修饰符都是必须掌握的核心知识点。
一、C# 成员修饰符整体分类
1. 行为修饰符(Behavior Modifiers)
| 修饰符 | 说明 |
|---|---|
| abstract | 成员无实现,必须由派生类实现 |
| virtual | 成员可以在派生类中被重写 |
| override | 对基类虚成员提供新的实现 |
| static | 成员属于类型本身 |
| const | 编译期常量 |
| readonly | 运行期只读字段 |
| extern | 成员在外部实现 |
| event | 声明事件成员 |
2. 访问修饰符(Access Modifiers)
| 修饰符 | 访问范围 |
|---|---|
| public | 任意位置 |
| private | 当前类或结构 |
| protected | 当前类及派生类 |
| internal | 同一程序集 |
| protected internal | 同一程序集或派生类 |
二、行为修饰符详解
abstract —— 抽象成员
public abstract class Animal
{
public abstract void Speak();
}
特点说明
- 没有方法体
- 抽象类不能实例化
- 派生类必须实现
- 不能与 private、static 同用
virtual —— 虚成员
public virtual void Print()
{
Console.WriteLine("Base");
}
- 提供默认实现
- 子类可选择重写
- 支持运行时多态
override —— 重写成员
public override void Print()
{
Console.WriteLine("Derived");
}
- 只能重写 virtual / abstract
- 方法签名必须一致
- 访问级别不能降低
static —— 静态成员
public static int Count;
- 属于类型本身
- 所有实例共享
- 不能访问实例成员
const —— 常量
public const int MaxValue = 100;
- 编译期确定
- 隐式 static
- 不可修改
readonly —— 只读字段
public readonly int Age;
public Person(int age)
{
Age = age;
}
- 运行期赋值
- 只能在声明或构造函数中赋值
extern —— 外部实现
public extern void NativeMethod();
- 实现位于外部
- 常用于 P/Invoke
event —— 事件
public event EventHandler Clicked;
- 基于委托
- 发布-订阅模型
三、访问修饰符详解
public
- 同一程序集
- 其他程序集
接口成员、枚举成员默认 public。
private(默认)
- 仅当前类或结构
- 方法默认 private
- 析构函数默认 private
protected
- 当前类
- 派生类
internal
- 同一程序集
- 类默认访问级别
protected internal
- 同一程序集 或
- 派生类
四、访问修饰符对比表
| 修饰符 | 同类 | 派生类 | 同程序集 | 跨程序集 |
|---|---|---|---|---|
| private | ✔ | ✖ | ✖ | ✖ |
| protected | ✔ | ✔ | ✖ | ✖ |
| internal | ✔ | ✔ | ✔ | ✖ |
| protected internal | ✔ | ✔ | ✔ | ✔ |
| public | ✔ | ✔ | ✔ | ✔ |
五、总结
- 行为修饰符:决定“怎么实现、能否继承”
- 访问修饰符:决定“谁能访问”
- 默认规则是高频考点
会写代码是基础,用好修饰符是设计能力。
4087

被折叠的 条评论
为什么被折叠?



