如果你用override,则无论调用的是A类还是B类中的TEST(),系统都会找到它实质类的TEST(); 如果是用的New,则可以通过类型转换调用到基类的TEST(); 下面是override的情况:A a = new A(); B b = new B(); A a1=new B(); a.Test();//调用A中Test(); b.Test();//调用B中Test(); a1.Test();//调用B中Test();系统会自动识别a1是B的实例 ((A)b).Test();//与上面相同 下面是new的情况: A a = new A(); B b = new B(); A a1=new B(); a.Test();//调用A中Test(); b.Test();//调用B中Test(); a1.Test();//调用A中Test(); ((A)b).Test();//与上面相同
以下是一个小demo,展示了new和override的本质区别:
class Program
{
static void Main(string[] args)
{
contact ct1 = new class1();
contact ct2 = new class2();
ct1.prinf();
ct2.prinf();
}
}
abstract public class contact
{
public virtual void prinf()
{
Console.WriteLine ("这是虚方法");
}
}
public class class1 : contact
{
public override void prinf()
{
Console.WriteLine ("这是新的方法");
}
}
public class class2 : contact
{
public new void prinf()
{
Console.WriteLine ("这是另一个新的方法");
}
}
此demo运行结果为:
这是新的方法
这是虚方法
源自http://wenda.so.com/q/1364405989067343 刚学到这里,看到这个总结的不错,就收藏一下