学过C#的人,应该都听过说虚方法和抽象方法,但是对于初学者来说,虚方法和抽象方法,还可能会时常搞混他们的关系。因此我们非常有必要抽出时间,把他们放在一起,进行对比,揭开他们神秘的外纱。
虚方法和抽象方法都可以供派生类重写,那么他们之间有什么区别呢?
虚方法必须有实现部分,而抽象方法必须没有实现部分。
<span style="font-size:18px;">public Class Animal//虚方法
{
public virtual void Sleep()
{}//实现部分
// virtual是虚方法的关键字体
public virtual void Shout()
{}
}</span>
<span style="font-size:18px;">public abstract Class Animal
{
public void Sleep();
public void Shout();
}</span>
正是因为抽象方法没有实现部分,所以必须强制其派生类重写其实现方法。使其在子类中实现。否则派生类将不能被实例化。(这一点并不用担心,因为如果我们制定一个子类继承抽象父类,那么我们的编译器会自动添加必须重写的方法。)
<span style="font-size:18px;">public Class Cat:Animal
{
public override void Sleep()
{
Console.WriteLine("Cat is sleeping")
}
public override void Shout()
{
Console.WriteLine("cat is Shouting")
}
}</span>
抽象方法和虚方法的区别:
虚方法有一个实现部分,并为派生类提供了覆盖该方法的选项,相反,抽象方法没有提供实现部分,强制派生类覆盖方法;
abstract方法只能在抽象类中声明,虚方法不是。
abstract方法必须在派生类中重写,而virtual则不必。
abstract方法不能声明方法实体,虚方法则可以。