最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#類的多態(tài)性詳解

 更新時(shí)間:2020年07月20日 08:44:54   作者:IT_xiao小巫  
這篇文章主要為大家詳細(xì)介紹了C#類的多態(tài)性,主要有兩種:一是編譯時(shí)的多態(tài)性,二是運(yùn)行時(shí)的多態(tài)性,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C#類的多態(tài)性,供大家參考,具體內(nèi)容如下

第一種:編譯時(shí)的多態(tài)性,直接這樣說不知道說啥?程序執(zhí)行過程主要分為三步:編譯,鏈接,運(yùn)行。在編譯時(shí)體現(xiàn)的多態(tài)性是通過方法的重載來實(shí)現(xiàn)的。方法的重載我們聽過,就是一個(gè)類對(duì)象調(diào)用若干同名,但參數(shù)類型、個(gè)數(shù)不同。類對(duì)象是根據(jù)參數(shù)類型,個(gè)數(shù)來決定調(diào)用哪個(gè)同名方法,實(shí)現(xiàn)何種操作。C#語(yǔ)言的方法重載與C++、java基本是一樣的,但是C#還包含C++的運(yùn)算符重載,java里面沒有這個(gè)概念。

第二種:運(yùn)行時(shí)的多態(tài)性,是在系統(tǒng)運(yùn)行時(shí),調(diào)用一個(gè)名字相同,參數(shù)類型也相同以及個(gè)數(shù)也完全一樣的方法,但會(huì)完成不同的操作。C#運(yùn)行時(shí)的多態(tài)性通過虛方法實(shí)現(xiàn)。在類方法聲明加上了virtual修飾符,稱為虛方法,反之為非虛方法。就這一點(diǎn)C#跟C++有很多相似之處。
代碼清單:虛方法與非虛方法的區(qū)別

namespace e_11 
{ 
 class A 
 { 
 public void F()  //非虛方法 
 { Console.WriteLine("A.F"); } 
 public virtual void G() //虛方法 
 { Console.WriteLine("A.G"); } 
 
 } 
 class B : A   //A類為B類的基類 
 { 
 new public void F() //隱藏基類的同名非虛方法F(),注意使用new 
 { Console.WriteLine("B.F"); } 
 public override void G() //隱藏基類的同名虛方法G(),注意使用override 
 { Console.WriteLine("B.G"); } 
 } 
 class Test 
 { 
 static void F2(A aA) //注意,參數(shù)為A類引用變量 
 { aA.G(); } 
 static void Main(string[] args) 
 { 
  B b = new B(); 
  A a1 = new A(); 
  A a2 = b;  //允許基類引用變量引用派生類對(duì)象,a2引用A類的派生類B的對(duì)象b 
  a1.F();  //調(diào)用基類A的非虛方法F(),顯示A.F 
  a2.F();  //F()為非虛方法,調(diào)用基類A的F(),顯示A.F 
  b.F();  //F()為非虛方法,調(diào)用派生類的F(),顯示B.F 
  a1.G();  //G()為虛方法,因a1引用基類A對(duì)象,調(diào)用基類A的G(),顯示A.G 
  a2.G();  //G()為虛方法,因a2引用派生類B對(duì)象,調(diào)用派生類B的G(),顯示B.G 
  F2(a2);  //由于a2引用A類派生類B的對(duì)象b,調(diào)用派生類B的的G(),顯示B.G 
  F2(a1);  //實(shí)參為基類A對(duì)象,調(diào)用A類的函數(shù)G(),顯示A.G 
 } 
 } 
} 
 

輸出結(jié)果:

看上面的代碼,我產(chǎn)生了一個(gè)疑問?為什么因?yàn)镚()為虛方法,a2引用派生類B對(duì)象,調(diào)用的是B類的G()?
這里有一個(gè)解釋:如果將基類引用變量引用不同對(duì)象,或者是基類對(duì)象,或者是派生類對(duì)象,用這個(gè)基類引用變量分別調(diào)用同名虛方法,根據(jù)對(duì)象的不同,會(huì)完成不同的操作。而非虛方法不具備次此功能。
關(guān)于類的多態(tài)性典型的例子:

//類的多態(tài)性 
namespace e_11 
{ 
 public class Person 
 { 
 private String name = "張三";  //類的成員說明 
 private int age = 12; 
 protected virtual void Display() //類的虛方法 
 { Console.WriteLine("姓名:{0},年齡:{1}", name, age); } 
 public Person(string Name, int Age) //構(gòu)造函數(shù),函數(shù)名和類名同名,無返回值 
 { name = Name; age = Age; } 
 static public void DisplayData(Person aPerson) //靜態(tài)方法 
 { aPerson.Display(); }  //不是靜態(tài)方法調(diào)用實(shí)例方法,如寫為Display()錯(cuò)誤 
 } 
 
 public class Employe : Person  //基類是Person 
 { 
 private string department; 
 private decimal salary; 
 public Employe(string Name, int Age, string D, decimal S) 
  : base(Name, Age) 
 { department = D; salary = S; } 
 protected override void Display() //重載虛方法,注意用Override 
 { 
  base.Display(); 
  Console.WriteLine("部門:{0}, 薪金:{1}", department, salary); 
 } 
 } 
 
 class Class1 
 { 
 static void Main(string[] args) 
 { 
  Person OnePerson = new Person("李四", 30); 
  Person.DisplayData(OnePerson); //顯示基類的數(shù)據(jù) 
  Employe OneEmployee = new Employe("王五", 40, "財(cái)務(wù)", 2000); 
  Person.DisplayData(OneEmployee); //顯示派生類數(shù)據(jù) 
 }//兩次調(diào)用完全相同的方法,實(shí)參不同,實(shí)現(xiàn)的功能不同 
 } 
 
} 

運(yùn)行效果:

以上就是本文的全部?jī)?nèi)容,希望能夠幫到大家。

相關(guān)文章

  • C#通過反射創(chuàng)建自定義泛型

    C#通過反射創(chuàng)建自定義泛型

    這篇文章主要介紹了C#通過反射創(chuàng)建自定義泛型的方法,需要的朋友可以參考下
    2014-08-08
  • WPF使用FontAwesome字體圖標(biāo)

    WPF使用FontAwesome字體圖標(biāo)

    這篇文章介紹了在WPF中使用FontAwesome字體圖標(biāo)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#中out保留字用法實(shí)例分析

    C#中out保留字用法實(shí)例分析

    這篇文章主要介紹了C#中out保留字用法,實(shí)例分析了方法返回值時(shí)采用out保留字的用法,需要的朋友可以參考下
    2014-09-09
  • C#把EXCEL數(shù)據(jù)轉(zhuǎn)換成DataTable

    C#把EXCEL數(shù)據(jù)轉(zhuǎn)換成DataTable

    這篇文章介紹了C#把EXCEL數(shù)據(jù)轉(zhuǎn)換成DataTable的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#中實(shí)現(xiàn)多繼承的方法

    C#中實(shí)現(xiàn)多繼承的方法

    這篇文章主要介紹了C#中實(shí)現(xiàn)多繼承的方法,本文通過給接口添加擴(kuò)展的方法實(shí)現(xiàn)了C#的多繼承,需要的朋友可以參考下
    2014-08-08
  • c#中的常用ToString()方法總結(jié)

    c#中的常用ToString()方法總結(jié)

    很多類都重寫了ToString方法, 導(dǎo)致很多類的tostring到底執(zhí)行了什么,有哪些參數(shù),都不清楚
    2012-10-10
  • C#實(shí)現(xiàn)聊天窗體以及抖動(dòng)

    C#實(shí)現(xiàn)聊天窗體以及抖動(dòng)

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)聊天窗體以及抖動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#利用ASP.NET?Core開發(fā)學(xué)生管理系統(tǒng)詳解

    C#利用ASP.NET?Core開發(fā)學(xué)生管理系統(tǒng)詳解

    隨著技術(shù)的進(jìn)步,跨平臺(tái)開發(fā)已經(jīng)成為了標(biāo)配,在此大背景下,ASP.NET?Core也應(yīng)運(yùn)而生。本文主要利用ASP.NET?Core開發(fā)一個(gè)學(xué)生管理系統(tǒng),感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • C# 使用SDL2實(shí)現(xiàn)Mp4文件播放音視頻操作

    C# 使用SDL2實(shí)現(xiàn)Mp4文件播放音視頻操作

    這篇文章主要介紹了C# 使用SDL2實(shí)現(xiàn)Mp4文件播放音視頻操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • c# 數(shù)據(jù)標(biāo)注與數(shù)據(jù)校驗(yàn)

    c# 數(shù)據(jù)標(biāo)注與數(shù)據(jù)校驗(yàn)

    這篇文章主要介紹了c# 數(shù)據(jù)標(biāo)注與數(shù)據(jù)校驗(yàn)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-10-10

最新評(píng)論

黄石市| 江陵县| 广西| 外汇| 东乌珠穆沁旗| 开鲁县| 江永县| 盐池县| 五指山市| 翁牛特旗| 乐安县| 芜湖市| 古交市| 庆阳市| 徐汇区| 金秀| 礼泉县| 绥阳县| 贵港市| 榆社县| 吉木乃县| 神木县| 永登县| 北川| 石门县| 巴彦淖尔市| 嘉兴市| 武清区| 北海市| 邵阳县| 渑池县| 泗阳县| 阿克苏市| 尼勒克县| 泰兴市| 水城县| 满洲里市| 汝阳县| 常州市| 长寿区| 洛隆县|