浅谈C#中虚方法与抽象方法的区别

前言:在前面的博文中,我介绍了C#中的虚方法与抽象方法,本博文将对两者的区别进行详细叙述。参考博文:浅谈C#中虚方法与隐藏方法的区别深究C#中的抽象类、抽象属性、抽象方法

一、虚方法的回顾

  1. 虚方法必须使用virtual修饰。
  2. 虚方法同抽象方法(abstract)一样,使用override关键字重写。
  3. 虚方法在子类中可以实现,也可以不实现。
  4. 虚方法必须有方法体哪怕是空的。
  5. 虚方法不能使用sealed修饰,否则不能重写。

二、抽象方法的回顾

  1. 抽象方法是隐式的virtual方法。
  2. 只允许在抽象类中使用抽象方法声明。
  3. 因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如:public abstract void MyMethod();
  4. 实现由overriding方法提供,它是非抽象类的成员。
  5. 在抽象方法声明中使用static或virtual修饰符是错误的。

三、虚方法与抽象方法的区别

  1. 关键字不同抽象方法(abstract)虚方法(virtual)。
  2. 抽象方法必须在抽象类中,而虚方法不需要。
  3. 抽象方法在父类中不可以实现,虚方法可以实现。
  4. 抽象方法子类必须实现抽象方法,虚方法可以选择实现或者不实现。

四、对于两者区别的总结

抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写;虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。重写的子类虚函数就是被覆盖了。

猜你喜欢

转载自blog.csdn.net/qq_44034384/article/details/106742815