virtual override new
简单说override将virtual的内容覆盖了,new不覆盖virtual内容,而是重新开辟了空间
例如:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace virtual与override
{
class Program
{
class A
{
public virtual string Name
{
get;
set;
}
public virtual void Say()
{
Console.WriteLine("A的Say");
}
}
class B:A
{
private string name;
new public string Name
{
get
{ return name; }
set
{
if (value != string.Empty)
{
name = value;
}
else
{
name = "不知道";
}
}
}
public override void Say()
{
Console.WriteLine("B的Say");
}
}
static void Main(string[] args)
{
B b = new B();
A a = b;
b.Name = "张三";
a.Name = "李四";
Console.WriteLine(b.Name);//结果为张三,说明a.Name="李四"是另一个属性,new并不覆盖virtual
Console.WriteLine(a.Name);//结果为李四
b.Say();//结果为B的Say
a.Say();//结果为B的Say,override将父类中的virtual方法覆盖重写了
A ac =new A();
ac.Name = "111";
Console.WriteLine(ac.Name);//结果为111
ac.Say();//结果为A的Say,证明A中的virtual也是可以实现的
Console.ReadKey();
}
}
}
|