内容

虚方法可以有实现体,若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚方法。使用了 virtual 修饰符后,不允许再有 static、abstract 或者 override 修饰符。

简单工厂模式中虚方法代码:

//用于运算后的结果 public virtual double GetResult() { double result = 0; return result; }

可以看出该类中有一个 GetResult() 的方法,GetResult() 方法中带有一个 virtual 修饰符,该修饰符表明:该基类的派生类可以重载该方法。 GetResult() 方法的作用:输出语句 "这是一个虚方法!" 到控制台。

一个虚方法的实现可以由派生类取代。取代所继承的虚方法的实现的过程称为重写该方法;在一个虚方法调用中,该调用所设计的那个实例运行时的类型确定了要被调用的究竟是该方法的哪一个实现。

抽象方法和虚方法的区别

  • 1.虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。
  • 2.抽象方法只能在抽象类中声明,虚方法不是。如果类包含抽象方法,那么该类也是抽象的,也必须声明类是抽象的。
  • 3.抽象方法必须在派生类中重写,这一点和接口类似,虚方法不需要再派生类中重写。

简单说,抽象方法是需要子类去实现的。虚方法是已经实现了的,可以被子类覆盖,也可以不覆盖,取决于需求。

抽象方法和虚方法都可以供派生类重写。

总结

总的来说,虚方法就是声明中含有 virtual 修饰符的方法。只能暂时这么理解了,后面有更加深层的理解后再来补充,也欢迎大家说一下自己的理解。