天天看點

c#中,類的重寫中,new和override的差別

在c#中有兩種方法可以重寫類的成員函數,分别是**new**和**override**,看書時書上并沒有說明兩者的差別,經過網上查資料後,總結如下:

如果使用的是override,則調用的是它實際類的函數,而用的是new的話,調用的是可以被轉換為其引用類的函數

A類 有方法 public virtual void test() 
B類繼承自A類,有方法 public new void test() 
如下執行個體化:
A a = new B(); 
a.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();//與上面相同