解釋泛型的基本原理

2021-08-23 11:38:15 字數 1476 閱讀 4321

解釋泛型的基本原理

本文節選自《.net程式設計師面試指南》一書

泛型可說是自.net 2.0中推出的眾多特性中相當重要的乙個,它解決了原先無法避免的容器操作的裝箱、拆箱問題。由於其重要性,它也成為了.net面試中常見的問題之一,本節筆者將通過分析問題簡要介紹泛型的基本原理。

所涉及到的知識點

• 泛型的基本概念

• 實現泛型的基本原理

分析問題

泛型的語法和概念非常類似於c++中的模板,泛型和c++中模板的設計是為了方便設計一些更加通用的型別,而在.net中泛型還有另外乙個重要作用,那就是避免容器操作中的裝箱和拆箱動作。**4-8是乙個簡單的泛型示例。

**4-8 泛型示例:arrayconvert.cs

namespace net.mst.fourth.genericclass

}//乙個簡單的泛型類

public class genericclass

public override string tostring()}}

所有的泛型引數名稱都以t開頭,這是由微軟在產品文件中提出的建議,作為一種編碼的通用規範,筆者建議讀者嚴格遵守這樣的規範,類似的規範還有所有的介面名稱都以i開頭。

在**4-8中,程式申明了乙個泛型型別genericclass。不要被表面的複雜所迷惑,和.net的眾多態別一樣,帶泛型引數的型別同樣是乙個確定的型別,在不被指定的情況下,它直接繼承自syste.ojbect型別,並且可以派生出其他型別。但是,泛型型別還是和普通型別有著一定的區別。通常泛型的型別被稱為開放式型別,.net的機制規定開放式型別不能被例項化,這樣就確保了開放式型別的泛型引數型別在被指定時前,不會被例項化成任何物件(事實上.net也沒辦法進行例項化,因為不確定需要分配多少記憶體給開放式型別)。在**4-8的main方法中,指定了開放型別的實參,這個時候重新定義了乙個新的封閉式型別genericclass,針對該型別的所有例項化都是合法的。

為開放式的型別提供泛型的例項導致了乙個新的封閉型別的生成,但這並不代表新的封閉型別和開放型別有任何派生繼承的關係,事實上,兩者在類結構圖上處於同一層次,並且兩者之間沒有什麼關係。

在圖4.4中,筆者構造了幾個新的型別,並且用深、淺色區分了開放型別和閉合型別,讀者可以清晰地看到,開放型別和閉合型別在類結構圖中並沒有任何區別,也沒有相互間的聯絡。

最後讀者需要了解的是,.net在system.collections.generic命名空間下定義了諸如list<>、dictionary等泛型容器,並且在system.array中定義了一些靜態的泛型方法,讀者應該在編寫**時充分利用已有的容器和演算法,以提高開發和系統執行的效率。

微軟公司的產品文件上鼓勵程式設計師使用新的泛型容器和方法來代替.net 1.1版本中的容器和方法,以提高程式的效能。

答案泛型類似於c++中的模板,允許程式設計師定義更通用的型別和演算法,並且在具體使用時再生成具體的封閉型別。所有帶泛型引數的型別都是乙個開放式型別,它不能被例項化,但具備所有封閉型別的其他特性,本質上,它和封閉型別沒有區別。

}j j l/m8rsm13164110

解釋泛型的基本原理

解釋泛型的基本原理 本文節選自 net程式設計師面試指南 一書 泛型可說是自.net 2.0中推出的眾多特性中相當重要的乙個,它解決了原先無法避免的容器操作的裝箱 拆箱問題。由於其重要性,它也成為了.net面試中常見的問題之一,本節筆者將通過分析問題簡要介紹泛型的基本原理。所涉及到的知識點 泛型的基...

mysql的基本原理 Mysql 基本原理

mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...

pwm控制的基本原理 PWM控制的基本原理

pwm pulse width modulation 控制 脈衝寬度調製技術,通過對一系列脈衝的寬度進行調製,來等效地獲得所需要波形 含形狀和幅值 pwm控制技術在逆變電路中應用最廣,應用的逆變電路絕大部分是pwm型,pwm控制技術正是有賴於在逆 變電路中的應用,才確定了它在電力電子技術中的重要地位...