abstract:
抽像一个方法或一个类,抽像一个类时如下:
public abstract class MigrateBase
{
protected abstract List<string> NeedReplaceColumn { get; }
}
MigrateBase 就可以做为其它类的基类,NeedReplaceColumn 属性在其的子类中则必须重写,就是说的override,而且abstract 在声名方法或属性时,实现不要写;
virtual:
虚拟一个方法,如下
public abstract class MigrateBase
{
protected virtual List<string> NeedReplaceColumn
{
get
{
List<string> numlist = new List<string>(){
{"one"},
{"two"}
};
return numlist;
}
}
}
virtual 在子类继承MigrateBase时可以override,也可以不override,不override的话,NeedReplaceColumn的值就是List<string>(){{"one"},{"two"}};
如果override 后,如下:
public class MigratePatientsDocuments : MigrateBase
{
protected override List<string> NeedReplaceColumn
{
get
{
List<string> numlist = new List<string>(){
{"three"},
{"four"}
};
return numlist;
}
}
那么在运行MigratePatientsDocuments类时,NeedReplaceColumn的值就是:
List<string>(){
{"three"},
{"four"}
};
override:
重载方法,父类有abstract的方法里,子类一定要对该方法override,而virtual的方法,可以不用.