c#繼承與多態(tài)使用示例
繼承和多態(tài)
派生類具有基類所有非私有數(shù)據(jù)和行為以及新類自己定義的所有其他數(shù)據(jù)或行為,即子類具有兩個有效類型:子類的類型和它繼承的基類的類型。
對象可以表示多個類型的能力稱為多態(tài)性。
多態(tài)性示例
public class Parent
{
public Parent() { }
public void MethodA()
{
Console.WriteLine("調(diào)用MethodA()");
}
public class Child:Parent
{
public Child() { }
public void MethodB()
{
Console.WriteLine("調(diào)用MethodB()");
}
}
class Test
{
static void Main(string[] args)
{
Parent oParent = new Parent();
oParent.MethodA();//OK 調(diào)用類型Parent的成員方法
//Child oChild1 = (Child)oParent;//運行錯誤
Child oChild=new Child();
oChild.MethodB();//OK 調(diào)用派生類Child的成員方法
oChild.MethodA();//OK 調(diào)用基類Parent的成員方法
Parent oParent1 =(Parent)oChild;
oParent1.MethodA();
//oParent1.MethodB();//編譯出錯,類型Parent不存在方法MethodB()
Console.ReadLine();
Child oChild1 = (Child)oParent1;
oChild1.MethodB();//OK 調(diào)用派生類Child的成員方法
oChild1.MethodA();//OK 調(diào)用基類Parent的成員方法
Console.ReadKey();
}
}
}
在上例中,類Child既有效的Child,又是有效的Parent。oChild可以作為類型Child,因而具有Child本身定義的方法MethodB()和基類Parent定義的方法MethodA();同時,對象oChild也可以強制轉(zhuǎn)換為Child的基類Parent的對象oParent。強制轉(zhuǎn)換不會更改oChild對象的內(nèi)容,但oParent對象作為類型Parent,因而只具有類Parent定義的方法MethodA()。
將Child強制轉(zhuǎn)換為Parent后,可以將該Parent重新強制轉(zhuǎn)換為Child。并只有實際上是Child實例的那些實例才可以強制轉(zhuǎn)換為Child,否則會產(chǎn)生運行錯誤:無法將類型為Parent的對象強制轉(zhuǎn)換為類型Child。
繼承的類型
C#包含兩種繼承類型:實現(xiàn)繼承和接口繼承。
現(xiàn)繼承表示一個類型派生于一個基類型,派生類具有基類的所有非私有(非Private)數(shù)據(jù)和行為。在實現(xiàn)繼承中,派生類型的每一個方法采用基類型的實現(xiàn)代碼,除非在派生類的定義中指定重寫該方法的實現(xiàn)代碼。實現(xiàn)繼承一般用于增加現(xiàn)有類型的功能,或許多相關(guān)的類型共享一組重要的公共功能場合。
接口繼承表示一個類型實現(xiàn)若干接口,接口僅包含方法的簽名,故接口繼承不繼承任何實現(xiàn)代碼。接口繼承一般用于指定該類型具有某類可用的特性,例如,如果指定類型從接口System.IDisposable中派生,并在該類中實現(xiàn)IDisposable接口的清理資源的方法Dispose(),則可以通過工通的機制調(diào)用該方法以清理資源。由于清理資源的方式特定于不同的類型,故在接口中定義通用的實現(xiàn)代碼是沒有意義的,接口即契約,類型派生于接口,即保證該類提供該接口規(guī)定的功能。
相關(guān)文章
C#中32位浮點數(shù)Float(Real)一步步按位Bit進行分析
這篇文章主要介紹了C#中32位浮點數(shù)Float(Real)一步步按位Bit進行分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
C#在運行時動態(tài)創(chuàng)建類型的實現(xiàn)方法
這篇文章主要介紹了C#在運行時動態(tài)創(chuàng)建類型的實現(xiàn)方法,主要通過動態(tài)生成C#代碼再編譯成程序集來實現(xiàn)動態(tài)創(chuàng)建類型的,需要的朋友可以參考下2014-09-09
C#實現(xiàn)BBcode轉(zhuǎn)為Markdown的方法
這篇文章主要給大家介紹了關(guān)于C#實現(xiàn)BBcode轉(zhuǎn)Markdown的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2018-02-02

