国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

c#繼承與多態使用示例

2020-01-24 02:55:06
字體:
來源:轉載
供稿:網友

繼承和多態

派生類具有基類所有非私有數據和行為以及新類自己定義的所有其他數據或行為,即子類具有兩個有效類型:子類的類型和它繼承的基類的類型。

對象可以表示多個類型的能力稱為多態性。

多態性示例

復制代碼 代碼如下:

public class Parent
    {
        public Parent() { }
        public void MethodA()
        {
            Console.WriteLine("調用MethodA()");
        }
        public class Child:Parent
        {
            public Child() { }

            public void MethodB()
            {
                Console.WriteLine("調用MethodB()");
            }

        }
        class Test
        {

            static void Main(string[] args)
            {

                Parent oParent = new Parent();
                oParent.MethodA();//OK 調用類型Parent的成員方法
                //Child oChild1 = (Child)oParent;//運行錯誤
                Child oChild=new Child();
                oChild.MethodB();//OK 調用派生類Child的成員方法
                oChild.MethodA();//OK 調用基類Parent的成員方法
                Parent oParent1 =(Parent)oChild;
                oParent1.MethodA();
                //oParent1.MethodB();//編譯出錯,類型Parent不存在方法MethodB()
                Console.ReadLine();
                Child oChild1 = (Child)oParent1;
                oChild1.MethodB();//OK 調用派生類Child的成員方法
                oChild1.MethodA();//OK 調用基類Parent的成員方法
                Console.ReadKey();

            }
        }

    }

在上例中,類Child既有效的Child,又是有效的Parent。oChild可以作為類型Child,因而具有Child本身定義的方法MethodB()和基類Parent定義的方法MethodA();同時,對象oChild也可以強制轉換為Child的基類Parent的對象oParent。強制轉換不會更改oChild對象的內容,但oParent對象作為類型Parent,因而只具有類Parent定義的方法MethodA()。

將Child強制轉換為Parent后,可以將該Parent重新強制轉換為Child。并只有實際上是Child實例的那些實例才可以強制轉換為Child,否則會產生運行錯誤:無法將類型為Parent的對象強制轉換為類型Child。

繼承的類型

C#包含兩種繼承類型:實現繼承和接口繼承。

現繼承表示一個類型派生于一個基類型,派生類具有基類的所有非私有(非Private)數據和行為。在實現繼承中,派生類型的每一個方法采用基類型的實現代碼,除非在派生類的定義中指定重寫該方法的實現代碼。實現繼承一般用于增加現有類型的功能,或許多相關的類型共享一組重要的公共功能場合。

接口繼承表示一個類型實現若干接口,接口僅包含方法的簽名,故接口繼承不繼承任何實現代碼。接口繼承一般用于指定該類型具有某類可用的特性,例如,如果指定類型從接口System.IDisposable中派生,并在該類中實現IDisposable接口的清理資源的方法Dispose(),則可以通過工通的機制調用該方法以清理資源。由于清理資源的方式特定于不同的類型,故在接口中定義通用的實現代碼是沒有意義的,接口即契約,類型派生于接口,即保證該類提供該接口規定的功能。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 万盛区| 靖远县| 漾濞| 六枝特区| 轮台县| 营山县| 丽水市| 海口市| 安新县| 寿光市| 璧山县| 华宁县| 盐源县| 轮台县| 忻城县| 开封市| 湖州市| 新巴尔虎左旗| 镇沅| 来宾市| 隆林| 宁国市| 炎陵县| 金华市| 通许县| 增城市| 长白| 西华县| 绵竹市| 东丰县| 合江县| 安丘市| 扶余县| 房产| 乌鲁木齐县| 昂仁县| 临泉县| 巴楚县| 绥阳县| 石渠县| 阿合奇县|