- C#支持重写实例方法和属性,不支持重写字段和静态成员。
- 基类必须使用关键字virtual标记允许重写的成员,派生类必须使用关键字override标记被重写的成员。
- 被重写的成员仍然是虚成员,仍然可以被派生类继续重写。
- 若要中止某一成员继承链,则使用关键字new修饰该成员,这样该成员自此由虚转实,不可以再被派生类重写。
using System;
namespace _16
{
class Program
{
static void Main(string[] args)
{
Test1 test1 = new Test1();
Test1 test2 = new Test2();
Test1 test3 = new Test3();
Console.WriteLine("*****测试override*****");
test1.Print1();
test2.Print1();
test3.Print1();
Console.WriteLine();
Console.WriteLine("*****测试new*****");
test1.Print2();
test2.Print2();
test3.Print2();
Console.WriteLine();
}
}
class Test1
{
public virtual void Print1()
{
Console.WriteLine("Test1");
}
public virtual void Print2()
{
Console.WriteLine("Test1");
}
}
class Test2 : Test1
{
public override void Print1()
{
Console.WriteLine("Test2");
}
public new void Print2()
{
Console.WriteLine("Test2");
}
}
class Test3 : Test2
{
public override void Print1()
{
Console.WriteLine("Test3");
}
public new void Print2()
{
Console.WriteLine("Test3");
}
}
}
