C#學習日記23---多態性 之 運算子多載、方法重載、抽象類別、虛方法

來源:互聯網
上載者:User
在C#中多態性的定義是:同一操作作用於不同類的執行個體,不同的類進行不同的解釋,最後產生不同的執行結果。換句話說也就是 一個介面,多個功能。

C# 支援2種形式的多態性: 編譯時間的多態性、運行時的多態性

編譯時間的多態性:

   編譯時間的多態性是通過重載來實現的

方法重載

   您可以在同一個範圍內對相同的函數名有多個定義。函數的定義必須彼此不同,可以是參數列表中的參數類型不同,也可以是參數個數不同。不能重載只有傳回型別不同的函式宣告。寫個例子

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;    namespace Test  {      class exchange  //定義一個exchange類      {//方法實現交換兩參數資料          public void swap(int a, int b)          {              int temp;              temp = a;              a = b;              b = temp;              Console.WriteLine("{0},{1}",a,b);          }          public void swap(string a, string b)          {              string temp;              temp = a;              a = b;              b = temp;              Console.WriteLine("{0},{1}", a, b);          }        }      class program      {          static void Main(string[] args)          {              exchange exch = new exchange();              exch.swap(10, 20);  //調用 swap(int a,int b)方法              exch.swap("大", "小");  //調用 swap(string a,string b)方法                    }      }  }

結果:

操作符重載

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;    namespace Test  {      class student  //定義student類      {          private int Chinese;          private int Math;          public void value(int a, int b)  //定義一個賦值的方法,以後學了構造方法就不這麼麻煩了          {              Chinese = a;              Math = b;          }          public static student operator + (student a, student b) //運算子多載,實現相加功能          {              student stu = new student();              stu.Chinese = a.Chinese + b.Chinese;              stu.Math = a.Math + b.Math;              return stu;          }          public int getChinese()  //擷取Chinese 的方法          {              return Chinese;          }          public int getMath()  //擷取Math 的方法          {              return Math;          }      }      class program      {          static void Main(string[] args)          {              student a = new student();              student b = new student();              a.value(70,80);              b.value(40, 50);              student stu = a + b;  //70+40, 80+50              Console.WriteLine("a+b Chinese = {0}\na+b Math = {1}", stu.getChinese(), stu.getMath());                        }      }  }

結果:

運行時的多態性:

  運行時的多態是指直到系統運行時,才根據實際情況決定實現何種操作,C#中運行時的多態通過抽象類別或虛方法來實現的。

抽象類別和抽象方法

   C# 允許您使用關鍵字 abstract 建立抽象類別或抽象方法,當一個衍生類別繼承自該抽象類別時,實現即完成。抽象類別包含抽象方法,抽象方法可被衍生類別實現。衍生類別具有更專業的功能。抽象類別不能夠被執行個體化,

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;    namespace Test  {//建立抽象類別和抽象方法     abstract class score      {         public abstract int Add();      }      //建立子類     class student : score     {         private int Chinese = 80;         private int Math = 90;         public override int Add()  //關鍵字 override 執行個體方法         {            int sum=Chinese+Math;             return sum;         }              }      class program      {          static void Main(string[] args)          {              student stu = new student();                              Console.WriteLine(stu.Add() );  //結果 170                       }      }  }

虛方法

  虛方法是使用關鍵字 virtual 聲明的。虛方法可以在不同的繼承類中有不同的實現。對虛方法的調用是在運行時發生的。

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;    namespace Test  {     class score      {         protected int Chinese = 80;         protected int Math = 90;         public virtual int Add()  //定義一個虛方法         {             int sum = Chinese + Math;             return sum;         }      }     //定義子類,實現方法     class student : score     {         public override int Add()  //關鍵字 override 執行個體方法,實現相減操作         {             int sub = Math - Chinese ;             return sub;         }              }      class program      {          static void Main(string[] args)          {              student stu = new student();                              Console.WriteLine(stu.Add() );  //結果 10                       }      }  }

我們可以看出運行時真正調用的方法並不是虛方法,而是override 執行個體後的方法

以上就是 C#學習日記23---多態性 之 運算子多載、方法重載、抽象類別、虛方法的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.