對.NET2.0泛型初步理解
知道泛型很久了,但是一直沒有好好的去研究過,最近看到很多系統的原始碼中都含有泛型的程式設計,所以心血來潮就查閱了MSDN之後code了一些程式碼來理解
泛型,的確在自己寫程式碼的過程中,能發現很多問題,這些看書都是體會不到的。
Code
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
//泛型測試2009.1.6
namespace ConsoleApplication1
{
class Test
{
static void Main(string[] args)
{
ArrayList Array = new ArrayList();
Array.Add(2);
Array.Add(8);
Array.Add("HELLO,I AM A TYPE OF STRING!");
foreach (int p in Array)
{
Console.WriteLine(p);
}
//這裡進行onboxing取消裝箱,foreach (int p in Array),其中int p的型別int是foreach執行拆箱的強制型別,
//因此如果這裡是建立一個創異類集合,必定會錯誤,因為"HELLO,WORLD"無法轉換為int
Console.WriteLine(Int32.Parse(Array[0].ToString()));
Console.WriteLine(Int32.Parse(Array[1].ToString()));
//string aa = Array[2];//為了證明加入集合的字串已經不再是字串,這裡是裝箱過的型別object,所以編譯錯誤,無法將object隱式轉換成string,
Console.WriteLine(Array[2]);//WriteLine接受引數本身就是object,這裡正常輸出,如果輸出字串
}
}
}
class Test2
{
static void Main(string[] args)
{
List
List3.Add(0);
List3.Add(1);
List3.Add(2);
List3.Add("i am not here?");//編譯器不能通過。
int the1 = List3[0];//呵呵,和上面相同的測試方式,這裡說明加入的集合資料沒有進行裝箱操作,集合元素本身的確是一個int型別
foreach (int p in List3)
{
Console.WriteLine(p);
}
}
}
class Test3
{
static void Main(string[] args)
{
string[] parm1 = { "I AM STRING1", "I AM STRING2", "I AM STRING3" };
Test3.Insert
}
public static void Insert
{
List
if (parms.Length > 0)
{
for (int i=0; i< parms.Length; i++)
{
ListT.Add(parms[i]);
}
}
foreach (T p in ListT)
{
Console.WriteLine(p);
}
}
}
Test1為什麼要泛型?
在foreach檢索時進行取消裝箱操作。強制轉換以及裝箱和取消裝箱操作都會降低效能,而且對於建立異類集合的時候。
即向集合加入不同型別資料的時候,如上, foreach (int p in Array)就不能迭代所有內容,遇見字串型別錯誤,而且C#編譯器在編譯的時不出錯,在執行時才顯示此錯誤,
Test2程式碼使用了泛型?
程式碼說明了加入集合的過程沒有在進行裝箱向上轉換為object的操作了,而且編譯器能夠通過安全檢查,只要是輸入非整形的就會報錯的,
這裡編譯器會同時候報兩次錯誤,
錯誤 1 與“System.Collections.Generic.List
\ConsoleApplication1\ConsoleApplication1\Program.cs 41 13 ConsoleApplication1
錯誤 2 引數“1”: 無法從“string”轉換為“int” C:\Documents and Settings\Administrator\桌面\ConsoleApplication1\ConsoleApplication1
\Program.cs 41 23 ConsoleApplication1;
Test3如何用泛型?
第三個示例是簡單的泛型應用,插入幾個方法Insert,根據需要指定一個型別引數,就可以,編譯器會自動檢查型別是否和你提供的型別一致。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-536625/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深入理解 Java 泛型Java泛型
- 我理解的 Java 泛型Java泛型
- 泛型的約束理解泛型
- 深入理解Java泛型Java泛型
- Java泛型理解與使用Java泛型
- 對稱加密和非對稱加密(一)初步理解加密
- Java & Go 泛型對比JavaGo泛型
- 一文理解TS泛型泛型
- Java基礎——深入理解泛型Java泛型
- 理解C#泛型運作原理C#泛型
- 泛型類、泛型方法及泛型應用泛型
- (學習筆記)python 對__init__的初步理解筆記Python
- 【java】【泛型】泛型geneticJava泛型
- C#泛型鍵值對集合C#泛型
- Java 乾貨之深入理解Java泛型Java泛型
- 泛型類和泛型方法泛型
- 泛型--泛型萬用字元和泛型的上下限泛型字元
- TypeScript 泛型介面和泛型類TypeScript泛型
- Go 泛型之泛型約束Go泛型
- 泛型泛型
- 泛型最佳實踐:Go泛型設計者教你如何用泛型泛型Go
- C#泛型的逆變協變(個人理解)C#泛型
- JavaScript 物件導向初步理解JavaScript物件
- 初步理解 JavaScript 底層原理JavaScript
- 深入理解泛型-重寫泛型類方法遇到的問題(涉及JVM反編譯位元組碼)泛型JVM編譯
- TypeScript 泛型型別TypeScript泛型型別
- 型別 VS 泛型型別泛型
- Java-對多型的理解Java多型
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- 泛型(一)泛型
- 泛型(三)泛型
- 泛型(二)泛型
- 泛型(四)泛型
- 泛型(五)泛型
- Java泛型Java泛型
- 泛型viewmodle泛型View
- 泛型(Generic)泛型
- Go 泛型Go泛型
- 【譯】在非泛型類中建立泛型方法泛型