天天看点

c#中new和override的区别

如果你用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 刚学到这里,看到这个总结的不错,就收藏一下