楼上回答的很好,简单明了,并带有例子。我在这把详细的区别贴出来,不过是我以前转别人博客收藏下来的,请楼主参考下!:)
用法可以简单描述成这样:
//抽象方法
public abstract class Animal
{
public abstract void Sleep();
public abstract void Eat();
}
//虚方法
public class Animal
{
public virtual void Sleep(){}
public virtual void Eat(){}
}
一、Virtual(虚拟):
1.修饰方法、属性、索引器或事件声明
2.允许在派生类中重写这些对象。说明:派生类可以重写这些方法,也可以不重写这些方法
3.修饰方法时注意:(可以有方法体)
调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。
默认情况下,方法是非虚拟的。不能重写非虚方法。
virtual 修饰符不能与 static、abstract, private 或 override 修饰符一起使用。
4.虚拟属性的行为与抽象方法一样。
在静态属性上使用 virtual 修饰符是错误的。
通过包括使用 override 修饰符的属性声明,可在派生类中重写虚拟继承属性。