C# virtual override abstract new区别
C#中关键字virtual、override、abstract、new等经常用到,现总结其用法以及区别如下:
一、abstract
abstract用于声明抽象类以及抽象方法。抽象方法不含主体,在继承类中通过override 关键字重写该函数;抽象类不可实例化,只能被继承。
二、virtual
virtual用于声明虚函数,虚函数是动态确定执行函数的方法,一般可实现方法主体,也可不实现。继承类中通过override 重写或者忽略不重写。也可以重新new该方法,使其变成新的实例方法。
三、override
override 主要用来重写abstract方法以及virtual方法。
四、new
new可以用来重写一个虚函数,也可在子类中new 父类中的实例方法,使其变成自己的方法。
五、综合示例代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
public interface transport
{
void dowork();
}
public abstract class Bus
{
public abstract void getName();
public abstract void dowork();
public virtual void getTypes()
{
Console.WriteLine("bus");
}
public virtual void getAge()
{
Console.WriteLine("3years");
}
public void getID()//一般方法,若在派生类中重写,须使用new关键字
{
Console.WriteLine("沪A 00000");
}
public void getWeight()
{
Console.WriteLine("1t");
}
}
public class car : Bus
{
public override void getName()
{
Console.WriteLine("奥迪");
}
public override void dowork()
{
Console.WriteLine("ok");
}
public override void getTypes()
{
Console.WriteLine("car");
}
public new void getAge()
{
Console.WriteLine("5years");
}
public new void getID()
{
Console.WriteLine("沪B 88888");
}
}
class A
{
public virtual void fun1()
{
Console.WriteLine("A");
}
}
class B : A
{
public new void fun1()
{
Console.WriteLine("B");
}
}
class Program
{
static void Main(string[] args)
{
car mycar = new car();
mycar.getName();
mycar.dowork();
mycar.getTypes();
mycar.getAge();
mycar.getID();
mycar.getWeight();
A a = new B();
a.fun1();
}
}
}
运行结果:
奥迪
ok
car
5years
沪B 88888
1t
A
请按任意键继续. . .