如果你用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 剛學到這裡,看到這個總結的不錯,就收藏一下