天天看點

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