重载与重写是C#面向对象的多态性的重要体现。
如下面的示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class A
{
public virtual void fun1()
{
Console.WriteLine("A.fun1");
}
public void fun2(B test)
{
test.fun1();
fun1();
}
}
public class B:A
{
public new void fun1()
{
Console.WriteLine("B.fun1");
}
}
class Program
{
static void Main(string[] args)
{
A yktest = new B();
B test = new B();
yktest.fun2(test);
Console.ReadKey();
}
}
}
该例中显式的用new关键字重写方法,因此不会对父类方法进行覆盖。运行结果会是B.fun1 A.fun1.
如果用关键字override则运行结果是B.fun1 B.fun1.