虚方法在形式上在方法名前加virtual修饰.比如:
在C#中这样定义一个:
public class baseclass{
protected virtual int MyFunction(){
return -1
}
}
虚方法一般在基类定义,在派生类中实现具体操作,派生类实现该方法时,要用override修饰.如:
public class myclass:baseclass{
protected override int MyFunction(){
return 1;
}
}
创建实例时,可用基类的变量而调用子类的构造函数来实例.
如:
baseclass bc;
bc = new myclass();
int v=bc.MyFunction();//这里返回1,调用的时派生类的方法.
这样有什么好处呢?
比如往往在程序开始设计的类时,先进行抽象性的设计,比如:很多表都有增加、删除、查询操作,根据这样共同点,可以设计一个基类:
public class baseclass{
public virtual Dataview Select(){return null;}
public virtual bool Delete(){return false;}
public virtual bool add(){return false;}
}
这样,调用基类的虚方法来执行派生类的具体操作。而在基类调用时,并不需要知道派生类是怎么样实现的。因为不同的派生类可能实现的方式不一样。但调用的方式是一样的,这就大大增加代码的可维护性,脉络较清淅有条理。
还有一种情需要是在程序运行时,需要派生类的赋值。