sealed表示不可被继承和重写,可以修饰类,属性和方法。修饰属性和方法时需与override一起使用。
virtual表示可被重写,可以修饰属性和方法。
override表示重写父类virtual属性和方法。
非虚拟属性和方法会调用父类的属性和方法;虚拟属性和方法会调用子类的最后重写的属性和方法。
public class father
{
public father() {
Console.WriteLine("father_structure");
}
private string virtual_thing;
public virtual string Virtual_thing
{
get { return virtual_thing; }
set { virtual_thing = "(father_virtual)" + value; }
}
private string thing;
public string Thing
{
get { return thing; }
set { thing = "(father)" + value; }
}
public void say() {
Console.WriteLine("father say:{0}!{1}!", Thing, Virtual_thing);
}
public virtual void speak()
{
Console.WriteLine("father speak:{0}!{1}!", Thing, Virtual_thing);
}
public son()
{
Console.WriteLine("son_structure");
}
private string virtual_thing;
public override string Virtual_thing
{
get { return virtual_thing; }
set { virtual_thing = "(son_virtual)" + value; }
}
private string thing;
public string Thing
{
get { return thing; }
set { thing = "(son)" + value; }
}
public void say()
{
Console.WriteLine("son say:{0}!{1}!", Thing, Virtual_thing);
}
public override void speak()
{
Console.WriteLine("son speak:{0}!{1}!", Thing, Virtual_thing);
}
father father_son = new son();
father_son.Thing = "this is thing";
father_son.Virtual_thing = "this is virtual_thing";
father_son.say();
father_son.speak();
运行结果如下: