C 成魔之路 4 C 物件導向高階技術 2

2021-07-10 07:26:16 字數 3082 閱讀 4644

1、迭代器

使用foreach語句遍歷陣列或者集合時,該語句可以逐一列舉出集合或者陣列中的元素,這正是迭代器的功能體現。

迭代器概念:

迭代器是可以返回相同型別的值的有序序列的一段**,可以用作方法、運算子或者get訪問器的**體。迭代器**使用yield return語句依次返回每個元素,yield break語句將終止迭代。可以在類中實現多個迭代器,每個迭代器都必須像任何類成員一樣有唯一的名稱,並且可以在foreach語句中被客戶端**呼叫。迭代器的返回型別必須是ienumerable或ienumerator中的任意一種。

迭代器運用:

建立迭代器最常用的方法是對ienumerator介面實現getenumerator方法,下面通過例項進行演示如何使用迭代器。

namespace ienumeratortest1

; public ienumerator getenumerator()}}

public

partial

class form1 : form

private

void

form1_load(object sender, eventargs e)}}

}//上述程式不能在vs2012中執行,需要進行再次修改。

2、分部類

在編寫類的時候為了實現一些特殊的需求,比如:無限建立原始檔既可將**新增到類中,盡可能的提高開發人員之間的合作效率。c#提供了內部類的概念。

(1)分部類概念

分部類的出現是的程式的結構更加合理。**的組織更加緊密。分部類將類、結構或者介面的定義拆分到兩個或者多個原始檔中。每個原始檔包含類定義的一部分。編譯應用程式時,編譯器會把所有部分組合起來,這樣的類稱為分部類。分部類主要應用在以下幾個方面:

i.當專案比較龐大的時候,使用分部類可以拆分乙個類至幾個檔案中。這樣的處理可以使得不同的開發人員同時進行工作,避免了效率低下。

ii.使用自動生成的源時,無需重新建立原始檔就可以**新增到類中。vs在建立windows窗體和web服務包裝**等時,都使用這個方法。

(2)分部類的使用

定義分部類時需要使用partial關鍵字,分部類的每個部分都必須包含乙個partial 關鍵字,並且其宣告必須和其他部分位於同乙個命名空間。

示例程式:簡單的四則運算計算器:

namespace partialtest

private

void

form1_load(object sender, eventargs e)

private

void

button1_click(object sender, eventargs e)

}catch (exception ex)}}

}

利用分部類所做的account類:

partial class account

}partial class account

}partial class account

}partial class account

}

3、泛型

泛型是用來處理演算法的、資料結構的一種程式設計方法。泛型的目標是採用廣泛使用和可互動性的形式來表示演算法和資料結構,以使他們能夠直接用於軟體構造。泛型類、結構、介面、委託和方法可以根據他們儲存和操作的資料型別來進行引數化。泛型能在編譯的時候,提供強大的型別檢查,減少資料型別之間的顯示轉換、裝箱操作和執行時的型別檢查。泛型類和泛型方法同時具備可重用性、型別安全和效率高等特性,這是非泛型類和非泛型方法無法具備的。泛型通常用在集合和在集合上執行的方法中。

泛型主要是提高了**的重用性。

(1)型別引數t

泛型的型別引數t可以看做是乙個佔位符。其不是一種型別,僅僅代表了某種可能的型別。在定義泛型時t出現的位置可以在使用時用任何型別來代替。型別引數t的命名準則如下:

使用描述性名稱命名泛型型別引數,除非單個字母名稱完全可以讓人了解它表示的含義,而描述性名稱不會有更多的含義。

public

inte***ce istudent

使用t作為描述性型別引數名的字首。

public

inte***ce istudent

}

(2)泛型介面

宣告泛型介面的時候,和宣告一般介面的唯一區別是增加了乙個< t>。一般來說,宣告泛型介面和宣告非泛型介面遵循相同的規則。泛型型別宣告所實現的介面必須對所有可能的構造型別都保持唯一:否則無法確定該為某些構造型別呼叫哪個方法。

泛型介面的宣告形式:

inte***ce 介面名

示例程式:

namespace t_test

//實現上面泛型介面的泛型類

//派生約束wheret:ti(t要繼承自ti)

//建構函式約束wheret:new() (t可以被例項化)

public

class test: itestwhere t : ti, new()

}class program

}}

(3)泛型方法

泛型方法是在宣告中包括了型別引數t 的方法。泛型方法可以在類、結構或者介面證明中宣告,這些類、結構或者介面本身可以是泛型或者非泛型。如果在泛型型別宣告中宣告泛型方法,則方法體可以同時引用該方法的型別引數t和包含該方法的宣告的型別引數t。

泛型方法可以使用多型別引數進行過載。

泛型方法的宣告形式:

修飾符 void 方法名 《型別引數 t>

示例程式 :通過定義乙個泛型方法,查詢陣列中的某個數字的位置。

namespace t_test1

}return -1;}}

class program

,9);

console.writeline("9 在陣列當中的位置是:"+i.tostring());

console.readline();}}

}

C 成魔之路 3 C 物件導向高階技術 1

c 中不支援多重繼承。為了避免傳統的多重繼承給程式帶來複雜性的問題,同時保證多重繼承給程式設計師帶來的好處,提出了介面的概念。1 介面 1 介面的概念以及宣告 介面提出了一種契約,讓使用介面的程式設計人員必須嚴格遵守介面提出的約定。強制性的要求實現子類,即完全實現某個介面的派生類 必須實現介面約定的...

C 物件導向(高階)

1.構造 委託 乙個建構函式可以呼叫另外的建構函式 class aa int i a i,0 a int i,int j 注 避免遞迴呼叫 例 class aa int i a i,0 a int i,int j a 2.不可變物件和類 immutable object and class 不可變物...

C 物件導向高階程式設計 筆記

最近重新複習了一下c 物件導向高階程式設計中知識點,學而時習之,不亦說乎。拷貝建構函式,拷貝的是同型別的物件 賦值建構函式 檢測自我賦值 為什麼?有什麼作用?if this str return this 組合繼承 委託示例 委託 繼承 composite pimpl 編譯防火牆 左邊永遠不用編譯,...