简单例子整理
using System;
namespace ConsoleApplication1
{
class BaseClass
{
public virtual void Method0()
{
Console.WriteLine("Base - Method0");
}
public virtual void Method1()
{
Console.WriteLine("Base - Method1");
}
public void Method2()
{
Console.WriteLine("Base - Method2");
}
}
class DerivedClass : BaseClass
{
public override void Method0()
{
Console.WriteLine("Derived - Method0");
}
public new virtual void Method1()
{
Console.WriteLine("Derived - Method1");
}
public new void Method2()
{
Console.WriteLine("Derived - Method2");
}
}
class Program
{
static void Main(string[] args)
{
BaseClass bc = new BaseClass();
DerivedClass dc = new DerivedClass();
BaseClass bcdc = new DerivedClass();
// The following two calls do what you would expect. They call
// the methods that are defined in BaseClass.
bc.Method0();
bc.Method1();
bc.Method2();
// Output:
// Base - Method0 BaseClass bc = new BaseClass(); virtual -> override
// Base - Method1 DerivedClass dc = new DerivedClass(); virtual -> new virtual
// Base - Method2 BaseClass bcdc = new DerivedClass(); 空 -> new
// The following two calls do what you would expect. They call
// the methods that are defined in DerivedClass.
dc.Method0();
dc.Method1();
dc.Method2();
// Output:
// Derived - Method0 BaseClass bc = new BaseClass(); virtual -> override
// Derived - Method1 DerivedClass dc = new DerivedClass(); virtual -> new virtual
// Derived - Method2 BaseClass bcdc = new DerivedClass(); 空 -> new
// The following two calls produce different results, depending
// on whether override (Method1) or new (Method2) is used.
bcdc.Method0();
bcdc.Method1();
bcdc.Method2();
// Output:
// Derived - Method0 BaseClass bc = new BaseClass(); virtual -> override
// Base - Method1 DerivedClass dc = new DerivedClass(); virtual -> new virtual
// Base - Method2 BaseClass bcdc = new DerivedClass(); 空 -> new
Console.ReadKey();
}
}
}