共同点:
1. 用来修饰方法时候,访问修饰符必须是public ;同时在子类中重写时,访问修饰符也必须为public.
2. 在重写时必须加上override.
不同点:
1. abstract的方法(抽象方法)一定不能在父类中实现,而virtual的方法(虚方法)一定要在父类中实现。
2. abstract的方法在子类中必须被重写,而virtual的方法在子类中可以不被重写。
示例代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestVirtual
{
public class VirtualBase
{
public virtual void VirtualFunction()//虚方法一定要被实现,否则报错
{
Console.WriteLine("Virtual");
}
}
public abstract class AbstractBase
{
public abstract void AbstractFunction();//抽象方法不能被实现,否则报错
}
public class VirtualSon : VirtualBase
{
//虚方法可以不被重写
}
public class AbstractSon : AbstractBase
{
//抽象方法一定要被重写
public override void AbstractFunction()
{
Console.WriteLine("Abstract");
}
}
class Program
{
static void Main(string[] args)
{
VirtualSon virtualSon = new VirtualSon();
virtualSon.VirtualFunction();//输出父类方法的实现"Virtual"
AbstractSon abs = new AbstractSon();
abs.AbstractFunction();//输出子类方法的重写"Abstract"
Console.ReadLine();
}
}
}