小例子大智慧2--C#中的多型Polymorphism
以上篇的實體型別為引子,我就直接貼過來了:
Person例項型別:
public class Person
{
public string Name;
public string Sex;
public int Age;
//建構函式,初始化
public Person()
{
this.Name = "張三";
this.Sex = "男";
this.Age = 30;
}
public string SayHi()
{
return "Hell!How are you?";
}
//virtual修飾符進行修飾來啟用多型
public virtual string Hello()
{
return "Hell!How are you?";
}
}
加了一個Hello方法,並且看到有個字元去修飾,目的就是為了實現重寫
Student例項型別:
public class Student : Person
{
public int CJ;
//建構函式,初始化
public Student()
{
this.CJ = 90;
}
public string SayHi()//使用new有意隱藏基類方法
{
return "你好啊!....";
}
public override string Hello()//重寫
{
return "你好啊!....";
}
}
override重寫hello方法,實現多型
頁面aspx頁面的設計
<body>
<form id="form1" runat="server">
<div>
不用重寫多型:<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label><br />
重寫多型:<br />
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label><br />
<asp:Label ID="Label4" runat="server" Text="Label"></asp:Label>
</div>
</form>
</body>
後臺.cs檔案中程式碼
protected void Page_Load(object sender, EventArgs e)
{
//不用重寫多型
Person[] p = new Person[2];
p[0] = new Person();
p[1] = new Student();
foreach (var l in p)
{
if (l is Student)
{
Student s = l as Student;
Label1.Text = s.SayHi();
}
else if (l is Person)
{
Person t = l as Person;
Label2.Text = t.SayHi();
}
}
//重寫多型
Person[] persons = new Person[2];
persons[0] = new Person();
persons[1] = new Student();
int index = 0;
foreach (var z in persons)
{
++index;
if (index == 1)
{
Label3.Text = z.Hello();
}
else
{
Label4.Text = z.Hello();
}
}
}
如果不用重寫實現多型的話,第一種方法如果加一個例項類怎麼辦?
第二種能很好的體現出來,不用區分。
頁面顯示結果:
不用重寫多型:
你好啊!....
Hell!How are you?
重寫多型:
Hell!How are you?
你好啊!....
相關推薦
小例子大智慧2--C#中的多型Polymorphism
以上篇的實體型別為引子,我就直接貼過來了: Person例項型別: public class Person { public string Name; public string Sex; public int Ag
C++中多型和虛擬函式怎麼回答
1.定義: 多型性可以簡單地概括為“一個介面,多種方法”,程式在執行時才決定呼叫的函式,它是面向物件程式設計領域的核心概念。多型(polymorphism),字面意思多種形狀。 C++多型性是通過虛擬函式來實現的,虛擬函式允許子類重新定義成員函式,而子類重新
C++中多型性和過載
引數傳遞有傳值、傳址和引用三種void f(int n){}//定義傳值方式 int a; f(a);//呼叫傳值方式 void f(int *n){}//定義傳址方式 int a; f(&a);//呼叫傳址方式 void f(int &n){}//定義引用方式 int a; f(a);//呼
C++中 多型 過載 覆蓋
面向物件的三大特徵: 1.封裝:保證物件自身資料的完整性、安全性 2.繼承:建立類之間的關係,實現程式碼複用、方便系統的擴充套件 3.多型:相同的方法呼叫可實現不同的實現方式。多型是指兩個或多個屬於不同類的物件,對於同一個訊息(方法呼叫)作出不同響應的方式。(同樣的
C++中多型的實現原理
多型是面向物件的基本特徵之一。而虛擬函式是實現多型的方法。那麼virtual function到底如何實現多型的呢?1 基類的記憶體分佈情況請看下面的sample class A { void g(){.....} }; 則sizeof(A)=1; 如果改為如下: class A { public:
c/c++ 繼承與多型 文字查詢的小例子(智慧指標版本)
為了更好的理解繼承和多型,做一個文字查詢的小例子。 介面類:Query有2個方法。 eval:查詢,返回查詢結果類QueryResult rep:得到要查詢的文字 客戶端程式的使用方法: //查詢包含Daddy的文字所在的行 Query q("Daddy"); //查詢不包含Alice的
Hibernate中的HQL的基本常用小例子,單表查詢與多表查詢
<span style="font-size:24px;color:#3366ff;">本文章實現HQL的以下功能:</span> /** * hql語法: * 1)單表查詢 * 1.1 全表查詢 * 1.2 指定欄
C#中多集合組合實現
實現 ram for var fun list() int32 class sin C#中多集合組合使用方法,主要用到 Enumerable.Join方法 var skuInfoList = new Dictionary<int, List<long>&
(C/C++學習筆記)2.C++中vector的使用
alt double space ons 說明 info 部分 所有 con 說明:vector是C++中一個非常方便的容器類,它用於存放類型相同的元素,利用成員函數及相關函數可以方便的對元素進行增加或刪除,排序或逆序等等,下面將對這些功能一一敘述。 一.vector的第一
滴水穿石 C#中多線程 委托的使用
兩種方法 例子 圖片 強制 註意 event 檢查 water 過程 什麽是多線程?我們在建立以個C#項目時,往往會在Form1上添加控件,然後寫代碼,初 學者都是在重復這個過程,其實這個過程是單線程的,可以理解為只有“main”主線程,有 的時候往往需要同時測量多個東西,
小穴位大健康2
小穴位大健康2 紅朝儒生 2011-10-14 關鍵字:小穴位 大健康 李智 簡介:看完了李智的《小穴位大健康2》,做個筆記,希望有用。 目錄 第一章 八大疾病來龍去脈細細
python(2.7)中多執行緒使用舉例
python(2.7)中多執行緒使用舉例 python27中多執行緒使用舉例 下邊的程式碼都不難理解,不做多餘解釋。唯一有困惑的地方已經在原始碼中註釋說明。這裡也不做多執行緒編碼知識的講解。把這幾種形式(主要是第三種)練成muscle mem
C++繼承多型實現介面內容封裝例子
封裝(private中的資料都通過Get與Set來訪問)可以使程式碼模組化,繼承(:)可以擴充套件已存在的程式碼,而多型的目的是為了介面重用(即相同名字的介面可能實現不同的Function功能,因為他們可能可以擴充套件成一個子類)。多型通過
[C++] 實現多型的一個例子
程式碼: #include <iostream> using namespace std; class Animal { public: virtual void makeSound() { cout << "rawr" &l
一個很短但能夠體現C++的多型的例子
通過用虛擬函式利用基類指標指向其各個派生類,減少了程式碼的冗餘 #include <iostream> using namespace std; class USB { public:
C++中多執行緒的加鎖機制
問題來源於某面試題: 編寫一個單例模式的類。 #include<iostream> #include<cstdio> #include<cstdlib> using namespace std; class singleStance{
小問題大思考之C++裡的inline函式
inline,一個神奇的關鍵字。有了它,你同時就可以獲取函式和巨集的優點。inline定義的函式,比起沒有inline的函式來說,沒有執行函式呼叫所帶來的負擔(對此可參見《C++程式的記憶體佈局》),因此它是高效率的;比起巨集來,它具有函式的可預期行為和引數型別檢驗。巨集的
c++中多個執行緒使用同一個函式
我是小白,最近在學習實現一個簡單的執行緒池,執行緒池中維護了一個存放執行緒的陣列以及一個任務佇列。在建立執行緒池(建構函式中)時建立若干個執行緒,起始時由於任務佇列中沒有任務,建立的每一個執行緒都處於阻塞狀態。使用pthread_create函式建立執行緒時把所有的執行緒與
C++中多繼承建構函式呼叫順序
class B1 {public: B1(int i) {cout<<"consB1"<<i<<endl;} };//定義基類B1 class B2 {public: B2(int j) {cout<<"consB2"<<
c#中多維陣列技術性能比較
源地址:http://www.cnblogs.com/yongbufangqi1988/archive/2010/06/10/1755863.html 多維陣列的三種技術:安全陣列訪問技術、安全交錯陣列訪問技術和非安全指標訪問技術。 時間 = 陣列生成時間 + 陣列元素