简述 C# 成员修饰符(Modifier)——从整体到细节全面解析

在 C# 语言中,成员修饰符(Modifier) 用于描述类型或成员的可访问性、实现方式、继承能力以及生命周期 。

无论是基础语法学习、工程开发,还是面试考察,成员修饰符都是必须掌握的核心知识点。


一、C# 成员修饰符整体分类

1. 行为修饰符(Behavior Modifiers)

修饰符 说明
abstract 成员无实现,必须由派生类实现
virtual 成员可以在派生类中被重写
override 对基类虚成员提供新的实现
static 成员属于类型本身
const 编译期常量
readonly 运行期只读字段
extern 成员在外部实现
event 声明事件成员

2. 访问修饰符(Access Modifiers)

修饰符 访问范围
public 任意位置
private 当前类或结构
protected 当前类及派生类
internal 同一程序集
protected internal 同一程序集或派生类

二、行为修饰符详解

abstract ------ 抽象成员

csharp 复制代码
public abstract class Animal
{
    public abstract void Speak();
}

特点说明

  • 没有方法体
  • 抽象类不能实例化
  • 派生类必须实现
  • 不能与 private、static 同用

virtual ------ 虚成员

csharp 复制代码
public virtual void Print()
{
    Console.WriteLine("Base");
}
  • 提供默认实现
  • 子类可选择重写
  • 支持运行时多态

override ------ 重写成员

csharp 复制代码
public override void Print()
{
    Console.WriteLine("Derived");
}
  • 只能重写 virtual / abstract
  • 方法签名必须一致
  • 访问级别不能降低

static ------ 静态成员

csharp 复制代码
public static int Count;
  • 属于类型本身
  • 所有实例共享
  • 不能访问实例成员

const ------ 常量

csharp 复制代码
public const int MaxValue = 100;
  • 编译期确定
  • 隐式 static
  • 不可修改

readonly ------ 只读字段

csharp 复制代码
public readonly int Age;

public Person(int age)
{
    Age = age;
}
  • 运行期赋值
  • 只能在声明或构造函数中赋值

extern ------ 外部实现

csharp 复制代码
public extern void NativeMethod();
  • 实现位于外部
  • 常用于 P/Invoke

event ------ 事件

csharp 复制代码
public event EventHandler Clicked;
  • 基于委托
  • 发布-订阅模型

三、访问修饰符详解

public

  • 同一程序集
  • 其他程序集

接口成员、枚举成员默认 public。


private(默认)

  • 仅当前类或结构
  • 方法默认 private
  • 析构函数默认 private

protected

  • 当前类
  • 派生类

internal

  • 同一程序集
  • 类默认访问级别

protected internal

  • 同一程序集 或
  • 派生类

四、访问修饰符对比表

修饰符 同类 派生类 同程序集 跨程序集
private ✔ ✖ ✖ ✖
protected ✔ ✔ ✖ ✖
internal ✔ ✔ ✔ ✖
protected internal ✔ ✔ ✔ ✔
public ✔ ✔ ✔ ✔

五、总结

  • 行为修饰符:决定"怎么实现、能否继承"
  • 访问修饰符:决定"谁能访问"
  • 默认规则是高频考点

会写代码是基础,用好修饰符是设计能力。

相关推荐
暴走约伯19 小时前
【VFX工具链源码拆解 09】终极工业化闭环:基于 ID 规则驱动的全自动场景建档、骨骼挂载与男转女场景迁移
unity·c#·游戏引擎·材质
用户788477316342 天前
WinForms 迁移 WPF:Upgrade Assistant 覆盖 30%,剩下 70% 我手写了六周
c#
寂寞的船2 天前
【Unity知识速递】第13期 Unity 内存泄漏排查实战:从 Memory Profiler 到 Lua 引用泄漏的生产级全链路诊断
unity·junit·c#·游戏引擎·lua
用户3721574261353 天前
C# 提取 PDF 附件:包括文档附件和页面注释附件
c#
寂寞的船3 天前
【Unity Bug挑战】第12期 Awaitable 二次 await 死锁之谜 —— 为什么同一个异步操作等两次就卡死?
unity·c#·游戏引擎·bug
huaqianzkh4 天前
WinForm C#:循环修改控件UI闪烁卡顿?SuspendLayout / ResumeLayout 与 BeginUpdate 优化
开发语言·ui·c#
用户3721574261355 天前
C# 实现 Excel 单元格保护:锁定公式并允许编辑指定区域
c#·ai编程·编程语言
公子小六5 天前
基于.NET的Windows窗体编程之WinForms数据持久化(1)
windows·microsoft·c#·.net·winforms
三雷科技5 天前
第6章第4节:自定义分词器
开发语言·c#
zhanghaha13145 天前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#