C#虚方法和抽象方法

虚方法:

1、virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑.
2、virtual方法可以直接使用,和普通方法一样
3、不是必须重写的. 子类可以使用base.方法 的方式调用, 无论有没有在子类使用override去重写

 

virtual关键字只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别
相应的
sealed关键字标示此方法不可以被重写

 转载于http://topic.youkuaiyun.com/u/20071117/11/c1ddc038-8e2a-4f8f-8108-0db57c4d45ab.html

 

 

 

 

 

 

 

 

 

虚方法和抽象方法的区别:

1.虚方法可以有实现体,抽象方法不能有实现体。

2.抽象方法
    要求派生类必须重载这个方法;


虚方法
    告诉编译器,这个方法可以重写。
    当基类的方法与派生类的方法重名时,
    可以选择派生类的方法从基类继承并重写,
    还是,把基类的方法隐藏起来。  

转载于http://zhidao.baidu.com/question/48817118.html

### 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]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值