欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C#教程

當(dāng)前位置:主頁 > 軟件編程 > C#教程 >

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

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C#教程|點(diǎn)擊: 次

第一種:編譯時(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#語言的方法重載與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)容,希望能夠幫到大家。

上一篇:C#操作數(shù)據(jù)庫中存取圖片文件的方法

欄    目:C#教程

下一篇:C#簡(jiǎn)單輸出日歷的方法

本文標(biāo)題:C#類的多態(tài)性詳解

本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6918.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有