(三十一)C#編程基礎複習——多態

特此聲明:本教程內容可能有部分參照其他博主的觀點或描述,但始終不影響我學習的熱情,代碼全部自己手工敲打,編輯此教程目的不是爲了博取大家眼球,也不是爲利益所驅,只是純屬爲了方便自己學習,編輯的過程中也讓自己加深了對C#各個基礎的印象,同時也讓自己編碼過程更加流暢順利,最後還能幫助到有需要的人,代碼都是自己親測有效,如有侵權可以聯繫本人刪除。

多態與封裝和繼承被視爲面向對象編程的三大特性。多態是一個希臘詞(Polymorphism),指“多種形態”,在C#中具有兩種類型的多態:

  1. 編譯時多態:通過C#中的方法重載和運算符重載來實現編譯時多態,也稱爲靜態綁定或早期綁定;
  2. 運行時多態:通過方法重載實現的運行時多態,也稱爲動態綁定或後期綁定。

一、編譯時多態

在編譯期間將函數與對象鏈接的機制稱爲早期綁定,也稱爲靜態綁定。C#提供了兩種技術來實現編譯時多態,分別是函數重載和運算符重載,本節介紹函數重載,運算符重載會在後面進行講解。

函數重載:在同一個作用域中,可以定義多個同名的函數,但是這些函數彼此之間必須有所差異,比如參數個數不同或參數類型不同等等,返回值類型不同除外。

示例代碼:定義名爲print的函數來打印不同類型的數據

namespace _018
{
    internal class Program
    {
        void print(int i)
        {
            Console.WriteLine("打印int類型的數據:{0}",i);
        }
        void print(double d)
        {
            Console.WriteLine("打印double類型的數據:{0}",d);
        }
        void print(string s)
        {
            Console.WriteLine("打印string類型的數據:{0}",s);
        }
        static void Main(string[] args)
        {
            Program p = new Program();
            p.print(123);
            p.print("Hello World");
            p.print(3.1415926);
            Console.ReadKey();

        }
    }
}

運行結果:

二、運行時多態

C#允許您使用abstract關鍵字來創建抽象類,抽象類用於實現部分接口。另外,抽象類包含抽象方法,可以在派生類中實現。

下面列舉了一些有關抽象類的規則:

  1. 不能創建一個抽象類的實例;
  2. 不能在一個抽象類外部聲明抽象方法;
  3. 通過在類定義時使用sealed關鍵字,可以將類聲明爲密封類,密封類不能被繼承,因此抽象類中不能聲明密封類;

示例代碼如下:演示什麼是抽象類

namespace _019
{
    abstract class Shape
    {
        public abstract int area();
    }
    class Rectangle : Shape
    {
        private int width, height;
        public Rectangle(int w,int h)
        {
            width = w;
            height = h;
        }
        public override int area()
        {
            return (width * height);
        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle(12, 15);
            double a = r.area();
            Console.WriteLine("長方形的面積爲:{0}", a);
            Console.ReadKey();

        }
    }
}

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章