您的位置:首页 > 编程语言 > C#

C# virtual override abstract new区别

2014-04-09 18:57 537 查看
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

请按任意键继续. . .
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: