虚方法
对应的关键字是virtual和override
示例代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace 重写重写
{
class Program:Student
{
static void Main(string[] args)
{
Program p = new Program();
p.admon();
Student s = (Student)p;
s.admon();
People pp = (People)s;
pp.admon();
}
override public void admon()
{
Console.WriteLine("Program");
}
}
class People
{
public virtual void admon() { }
}
class Student:People
{
override public void admon()
{
Console.WriteLine("Student");
}
}
}
输出结果:
Program
Program
Program
覆写方法
对应的关键字是virtual 、new,注意new关键字本身就是屏蔽成员的关键字,即不管加不加virtual 都会覆盖。
示例代码
using System;
using System.Collections.Generic;
using System.Text;
namespace 重写重写
{
class Program:Student
{
static void Main(string[] args)
{
Program p = new Program();
p.admon();
Student s = (Student)p;
s.admon();
People pp = (People)s;
pp.admon();
}
new public void admon()
{
Console.WriteLine("Program");
}
}
class People
{
public virtual void admon() { }
}
class Student:People
{
new public void admon()
{
Console.WriteLine("Student");
}
}
}
输出结果:
Program
Student
区别
方法调用时传递的级别不一样
new就是使用哪个类就传递到那个类
override就是不管调用哪个类,只会传递到最后一级的override。
virtual/override 同样适用属性和索引器上