《C# 抽象类详解》 C#中类抽象类构造函数结构体接口重载和重写1. 类Class本质引用类型分配在托管堆上。特点支持继承单继承、支持多态、可以有字段/属性/方法/构造函数。场景描述业务实体如User、Order包含复杂状态和行为。2. 结构体Struct本质值类型通常分配在栈上或作为类成员时在堆上。特点隐式密封不能继承其他类但可以实现接口轻量级适合存储小型、不可变的数据。注意在 C# 10 之前结构体不能定义显式的无参构造函数C# 10 之后允许但必须显式初始化所有字段。3. 静态类Static Class本质密封的抽象类无法被实例化或继承。特点只能包含静态成员方法、属性、字段全局唯一。场景工具类/帮助类如Math、FileHelper。4. 抽象类Abstract Class本质部分实现的基类无法被实例化。特点可以包含状态字段、具体方法有实现和抽象方法无实现强制子类重写。场景提供公共基础设施如Animal作为基类提供Name属性定义抽象方法MakeSound。5. 接口Interface本质行为契约仅定义成员签名C# 8 之后允许默认实现但核心理念仍是契约。特点不包含实例字段支持多重实现一个类可实现多个接口。场景解耦、依赖注入、定义通用能力如IDisposable、IEnumerable。6. 构造函数Constructor实例构造函数初始化对象的实例字段配合new调用。静态构造函数初始化静态成员在类型第一次被引用前自动调用且只执行一次线程安全。私有构造函数防止外部实例化常用于单例模式或工具类。7. 重载Overload—— 编译时多态定义同一个类中方法名相同但参数列表类型、数量、顺序不同。特征与返回类型无关与访问修饰符无关。public void Log(string msg) { } public void Log(string msg, int code) { } // 重载8. 重写Override—— 运行时多态定义子类重新实现父类标记为virtual或abstract的方法。特征必须使用override关键字不能重写sealed或static方法。对比隐藏newoverride会替换基类逻辑多态生效new仅隐藏基类成员多态失效9.Sealed 方法密封方法必须配对使用sealed必须和override一起出现即public sealed override void Method()。不能单独使用你不能在普通方法非重写方法上直接写sealed否则编译器报错。不能修饰静态方法静态方法属于类型本身不存在重写一说。高频对比对比维度抽象类 vs 接口状态存储抽象类可以有实例字段状态接口不能有实例字段C# 8 前实现代码可提供部分或全部实现传统仅签名C# 8 后可有默认实现继承/实现单继承多重实现构造函数可以有不能有适用场景“是什么”is-a关系如 狗是动物“能做什么”can-do关系如 狗能跑对比维度类 vs 结构体类型引用类型堆值类型栈继承支持单继承不支持隐式密封但可实现接口性能赋值传递引用开销较小赋值传递副本拷贝开销随字段增多可变性通常可变推荐设计为不可变readonly struct对比维度重载Overload vs 重写Override绑定时机编译时绑定运行时绑定作用范围同一类或继承链中横向扩展继承链中纵向替换关键字无特殊关键字基类用virtual派生类用override签名要求必须不同参数不同必须相同完全相同的方法签名