virtual关键字:表示声明当前函数为虚函数。
虚函数在声明时必须显示声明virtual关键字,虚函数必须具有函数主体(与普通函数无差别)。虚函数在派生类中可以重写,也可以不重写。
public class MyBaseClass
{
//定义虚函数
public virtual string VirtualMethod()
{
return "this is virtual method";
}
}
public class MyDerivedClass:MyBaseClass
{
//重写虚函数(非必须)
public override string VirtualMethod()
{
return "1";
}
}
abstract关键字:表示当前函数为抽象函数。
抽象函数不能直接实现,不能具有函数主体,声明必须写在abstract声明的抽象类中。抽象函数本身也是虚函数,但是不能声明关键字virtual。抽象函数在派生类中必须重写。
public abstract class MyBaseClass
{
//定义抽象函数
public abstract string AbstractMethod();
}
public class MyDerivedClass:MyBaseClass
{
//重写抽象函数(必须)
public override string AbstractMethod()
{
return "1";
}
}
override关键字:表示对基类的函数进行重写。
重写关键字只能写在派生类中,并且仅能重写基类中使用virtual、abstract或override关键字声明的函数,函数名称必须与基类中对应函数的名称完全相同。重写函数在派生类中可以再次重写,也可以不重写。
public class Baseclass
{
public virtual string OverrideMethod()
{
return "0";
}
}
public abstract class MyBaseClass:Baseclass
{
//定义抽象函数
public abstract string AbstractMethod();
//定义虚函数
public virtual string VirtualMethod()
{
return "this is virtual method";
}
//定义override声明的函数
public override string OverrideMethod()
{
return "this is override method";
}
}
public class MyDerivedClass:MyBaseClass
{
//重写抽象函数(必须)
public override string AbstractMethod()
{
return "重写抽象函数";
}
//重写虚函数(非必须)
public override string VirtualMethod()
{
return "重写虚函数";
}
//重写override声明的函数(非必须)
public override string OverrideMethod()
{
return "重写重写函数";
}
}