C# 中常會用到繼承的概念,繼承後如何呼叫到基底父類別或繼承後子類別的方法很有學問,這裡會介紹到 new & override 的差別..
C#
baseClass bc = new baseClass( );
DerivedClass dc = new DerivedClass( );
假設類別各有以下方法:
class baseClass{
public void Method1( ) { console.write("base Method1"); }
public void Method2( ) { console.write("base Method2"); }
};
class DerivedClass{
public void Method1( ) { console.write("Derived Method1"); }
public void Method2( ) { console.write("Derived Method2"); }
};
重點來了 == >
若我們把 DerivedClass 修改一下,寫成:
class DerivedClass{
public new void Method1( ) { console.write("Derived Method1"); }
public new void Method2( ) { console.write("Derived Method2"); }
};
baseClass xc = new DerivedClass( ) 呼叫會得到
// Output
base Method1
base Method2
這是因為使用 new 時會隱藏擴充類別方法,而呼叫到基底類別方法,這應該不會是一般繼承後相要得到的結果,除非真的要使用到基底類別方法。若我們要得到 DerivedClass Method 也就是擴充類別方法的話,就必須使用到 override & virtual 關鍵字,程式如下:
class baseClass{
public virtual void Method1( ) { console.write("base Method1"); }
public virtual void Method2( ) { console.write("base Method2"); }
};
class DerivedClass{
public override void Method1( ) { console.write("Derived Method1"); }
public override void Method2( ) { console.write("Derived Method2"); }
};
這樣結果才會使用到我們想要的繼承類別方法 ^ ^
// Output
Derived Method1
Derived Method2
C#
baseClass bc = new baseClass( );
DerivedClass dc = new DerivedClass( );
假設類別各有以下方法:
class baseClass{
public void Method1( ) { console.write("base Method1"); }
public void Method2( ) { console.write("base Method2"); }
};
class DerivedClass{
public void Method1( ) { console.write("Derived Method1"); }
public void Method2( ) { console.write("Derived Method2"); }
};
重點來了 == >
若我們把 DerivedClass 修改一下,寫成:
class DerivedClass{
public new void Method1( ) { console.write("Derived Method1"); }
public new void Method2( ) { console.write("Derived Method2"); }
};
baseClass xc = new DerivedClass( ) 呼叫會得到
// Output
base Method1
base Method2
這是因為使用 new 時會隱藏擴充類別方法,而呼叫到基底類別方法,這應該不會是一般繼承後相要得到的結果,除非真的要使用到基底類別方法。若我們要得到 DerivedClass Method 也就是擴充類別方法的話,就必須使用到 override & virtual 關鍵字,程式如下:
class baseClass{
public virtual void Method1( ) { console.write("base Method1"); }
public virtual void Method2( ) { console.write("base Method2"); }
};
class DerivedClass{
public override void Method1( ) { console.write("Derived Method1"); }
public override void Method2( ) { console.write("Derived Method2"); }
};
這樣結果才會使用到我們想要的繼承類別方法 ^ ^
// Output
Derived Method1
Derived Method2
留言
張貼留言