C#中虚方法和抽象方法分别用在什么时候

本文深入探讨多态与抽象方法在面向对象编程中的应用,通过比喻解释多态如何允许子类重写父类方法,以及抽象方法如何确保所有继承类都实现特定功能。

虚方法,抽象方法 很多时候都用在 多态 这里!!

对于多态:

就是说 父类定义的 虚方法 ,如果有子类改写,那么 其不同子类的对象 优先调用各自的 改写方法,如果没改写,就调用父类的

打个比方:

父亲有一家公司,有良好的运营模式

两个儿子 A B 分别开办了两个子公司。

A 儿子的公司,没有自己的 运营模式 ,于是在公司运营的时候,就使用自己父亲的公司的 运营模式。

B 儿子的公司,是一个 夜总会,父亲的 运营模式 就不适合了,B就改写了 一个新的 运营模式,那么就优先使用自己的 运营模式。

至于抽象方法,那就好比:父亲知道公司必须要有一个 运营模式。但父亲却没有自己的公司。于是,父亲寄希望于儿子,儿子们的公司,都必须实现 当初父亲构想的 运营模式。

### C#虚方法抽象方法的区别 #### 定义方式 在 C# 中,虚方法通过 `virtual` 关键字定义,在基类中提供了一个默认实现。而抽象方法使用 `abstract` 关键字标记,位于抽象类内,并不给出具体实现[^1]。 ```csharp public class BaseVirtual { public virtual void ShowMessage() { Console.WriteLine("Base Virtual Message"); } } public abstract class BaseAbstract { public abstract void ShowMessage(); } ``` #### 实现要求 对于继承自含有虚方法的类来说,子类可以选择是否重写该方法。然而,当一个类继承了带有抽象方法抽象类时,除非这个子类本身也是抽象类,否则它必须实现所有的抽象方法[^2]。 ```csharp // 继承并选择性覆盖虚方法 public class ChildOfVirtual : BaseVirtual { // 可以省略此部分,默认调用父级版本 public override void ShowMessage() { Console.WriteLine("Child Override Virtual Message"); } } // 必须实现抽象方法 public class ChildOfAbstract : BaseAbstract { public override void ShowMessage() { Console.WriteLine("Implement Abstract Method Here"); } } ``` #### 默认行为差异 由于虚方法已经包含了具体的执行逻辑,因此即使未被任何后代所改写也能正常工作;相反地,因为抽象方法缺乏实际操作内容,所以无法直接实例化其所在的类或调用这些未经填补的方法体[^3]。 #### 设计意图对比 - **虚方法**适合于那些希望给定某种基础功能但又允许后续扩展的情况; - **抽象方法**更适用于框架搭建者想要规定某些契约性的接口却不想限定其实现细节的情形下[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值