<span style="font-family:KaiTi_GB2312;font-size:24px;">一:字面理解:</span>
virtual:adj.实质上的;(计算机)虚拟的,虚像的;
override:vt.推翻,无视,覆盖,优先于;
从字面上,我们就可以大概猜测出virtual和override关键字在c#中的作用了,光猜测还是不够,要有所落实。
二:概念比对:
virtual关键字:
(在基类中使用)用于修饰方法,属性,索引器或事件声明,并且允许在派生类中重写这些对象。
override关键字:
(在派生类中使用)要扩展或修改继承的方法,属性,索引器或事件的抽象实现或虚实现,必须使用override修饰符。
对比:我们可以发现,它们两个关键字是相对使用的,方法重写必须要有override关键字,但基类需满足是抽象方法abstract或虚拟方法virtual就行。
三:备注比对:
virtual:
1)默认情况下,方法是非虚拟的,不能重写非虚拟方法。
2)virtual修饰符不能与static,abstract,private,或override修饰符一起使用。
3)除了声明和调用语法不同外,虚拟方法和抽象方法是一样的。(这里其实可以上网看看虚拟方法和抽象方法比较)
override:
1) 不能重写非虚方法或静态方法,重写的基类必须是virtual,abstract。
2)override修饰符不能用new,static,virtual修饰符来修饰。
四:实例大战:
<span style="font-family:KaiTi_GB2312;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JIA
{
class Program
{
static void Main(string[] args)
{
Person jia = new student();
jia.Print();
}
}
//创建基类Person
abstract public class Person
{
public virtual void Print()
{
Console.WriteLine("你好");
}
}
//创建派生类student
public class student : Person
{
public override void Print()
{
Console.WriteLine("这是学生");
Console.ReadLine();
}
}
}</span>
运行结果如下: