一、Virtual方法(虚方法)
virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:
情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。
情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。
二、Abstract方法(抽象方法)
abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。
1、接口interface
public interface IPerson
{
void getName2(string s);//不包含方法主体
object getName4();//不包含方法主体
}
public class Chinese : IPerson
{
public void getName2( string s)
{
}
public string getName3()
{
return "111";
}
public object getName4()
{
return (object)"11";
}
}
//接口IPerson中方法不能用public abstract static 等修饰,无字段变量,无构造函数。
//类Chinese 必须实现 IPerson中的各个方法
2、abstract:声明抽象类、抽象方法
1.抽象方法所在类必须为抽象类
2.抽象类不能直接实例化,必须由其派生类实现。
3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似。
public abstract class Book2
{
public Book2()
{
}
public abstract void getPrice(); //抽象方法,不含主体
public virtual void getName() //虚方法,可覆盖
{
MessageBox.Show("this is a test:virtual getName()");
}
public virtual void getContent() //虚方法,可覆盖
{
MessageBox.Show("this is a test:virtual getContent()");
}
public void getDate() //一般方法,若在派生类中重写,须使用new关键字
{
MessageBox.Show("this is a test: void getDate()");
}
}
public class JavaBook2 : Book2
{
public override void getPrice() //实现抽象方法,必须实现
{
MessageBox.Show("this is a test:JavaBook2 override abstract getPrice()");
}
public override void getName() //覆盖原方法,不是必须的
{
MessageBox.Show("this is a test:JavaBook2 override virtual getName()");
}
}
3、virtual:标记方法为虚方法
1.可在派生类中以override覆盖此方法
2.不覆盖也可由对象调用
3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法
abstract 与virtual : 方法重写时都使用 override 关键字
接口定义以大写字母I开头。方法只定义其名称,在C#中,方法默认是公有方法;用public修饰方法是不允许的,否则会出现编译错误;接口可以从别的接口继承,如果是继承多个接口,则父接口列表用逗号间隔。
接口可以通过类来实现,当类的基列表同时包含基类和接口时,列表中首先出现的是基类;类必须要实现其抽象方法;
转载自:https://www.cnblogs.com/vaevvaev/p/6911788.html