日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

深入浅出.NET泛型编程(1)

發布時間:2023/12/10 asp.net 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入浅出.NET泛型编程(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
深入淺出.NET泛型編程(1) 使用泛型集合

  .NET 2.0的System.Collections.Generics 命名空間包含了泛型集合定義。各種不同的集合/容器類都被"參數化"了。為使用它們,只需簡單地指定參數化的類型即可。請看例2:

  例2.類型安全的泛型列表
List<int>?aList?=?new?List<int>();
aList.Add(
3);
aList.Add(
4);
//?aList.Add(5.0);
int?total?=?0;
foreach(int?val?in?aList)
{
 total?
=?total?+?val;
}

Console.WriteLine(
"Total?is?{0}",?total);?
在例2中,我編寫了一個泛型的列表的例子,在尖括號內指定參數類型為int。該代碼的執行將產生結果"Total is 7"?,F在,如果我去掉語句doubleList.Add(5.0)的注釋,我將得到一個編譯錯誤。編譯器指出它不能發送值5.0到方法Add(),因為該方法僅接受int型。不同于例1,這里的代碼實現了類型安全。

  5. CLR對于泛型的支持

  泛型不僅是一個語言級上的特征。.NET CLR能識別出泛型。在這種意義上說,泛型的使用是.NET中最為優秀的特征之一。對每個用于泛型化的類型的參數,類也同樣沒有脫離開微軟中間語言(MSIL)。換句話說,你的配件集僅包含你的參數化的數據結構或類的一個定義,而不管使用多少種不同的類型來表達該參數化的類型。例如,如果你定義一個泛型類型MyList<T>,僅僅該類型的一個定義出現在MSIL中。當程序執行時,不同的類被動態地創建,每個類對應該參數化類型的一種類型。如果你使用MyList<int>和MyList<double>,有兩種類即被創建。當你的程序執行時,讓我們進一步在例3中分析這一點。

  例3.創建一個泛型類
//MyList.cs
Using?directives#region?Using?directives
using?System;
using?System.Collections.Generic;
using?System.Text;
#endregion

namespace?CLRSupportExample
{
 
public?class?MyList<T>
 
{
  
private?static?int?objCount?=?0;
  
public?MyList()
  
{objCount++;?}
  
public?int?Count
  
{
   
get
    
{return?objCount;?}
  }

 }

}

//Program.cs
Using?directives#region?Using?directives
using?System;
using?System.Collections.Generic;
using?System.Text;
#endregion

namespace?CLRSupportExample
{
 
class?SampleClass?{}
 
class?Program
 
{
  
static?void?Main(string[]?args)
  
{
   MyList<
int>?myIntList?=?new?MyList<int>();
   MyList<
int>?myIntList2?=?new?MyList<int>();
   MyList<
double>?myDoubleList?=?new?MyList<double>();
   MyList<SampleClass>?mySampleList?
=?new?MyList<SampleClass>();
   Console.WriteLine(myIntList.Count);
   Console.WriteLine(myIntList2.Count);
   Console.WriteLine(myDoubleList.Count);
   Console.WriteLine(mySampleList.Count);
   Console.WriteLine(
new?MyList<sampleclass>().Count);
   Console.ReadLine();
  }

 }

}

該例中,我創建了一個稱為MyList泛型類。為把它參數化,我簡單地插入了一個尖括號。在<>內的T代表了實際的當使用該類時要指定的類型。在MyList類中,定義了一個靜態字段objCount。我在構造器中增加它的值。因此我能發現使用我的類的用戶共創建了多少個那種類型的對象。屬性Count返回與被調用的實例同類型的實例的數目。

  在Main()方法,我創建了MyList<int>的兩個實例,一個MyList<double>的實例,還有兩個MyList<SampleClass>的實例--其中SampleClass是我已定義了的類。問題是:Count(上面的程序的輸出)的值該是多少?在你繼閱讀之前,試一試回答這個問題。

  解決了上面的問題?你得到下列的答案了嗎?
12
22
31
41
52???
6/**//*注意:這里是2。因為這個是運行時動態創建的,在編譯時,static的變量值為1,如同第一,第二行,他們都是2,因為在編譯時就已經創建兩個int類型的實例,所以static的值是2*/
前面兩個2對應MyList<int>,第一個1對應MyList<double>,第二個1對應MyList<SampleClass>--在此,僅創建一個這種類型的實例。最后一個2對應MyList<SampleClass>,因為代碼中又創建了這種類型的另外一個實例。上面的例子說明MyList<int>是一個與MyList<double>不同的類,而MyList<double>又是一個與MyList<SampleClass>不同的類。因此,在這個例中,我們有四個類:MyList: MyList<T>,MyList<int>,MyList<double>和MyList<X>。注意,雖然有4個MyList類,但僅有一個被存儲在MSIL。怎么能證明這一點?請看圖1顯示出的使用工具ildasm.exe生成的MSIL代碼。

6. 泛型方法

  除了有泛型類,你也可以有泛型方法。泛型方法可以是任何類的一部分。讓我們看一下例4:

  例4.一個泛型方法

public?class?Program
{
 
public?static?void?Copy<T>(List<T>?source,?List<T>?destination)
 
{
  
foreach?(T?obj?in?source)
  
{
   destination.Add(obj);
  }

 }

 
static?void?Main(string[]?args)
 
{
  List<
int>?lst1?=?new?List<int>();
  lst1.Add(
2);
  lst1.Add(
4);
  List<
int>?lst2?=?new?List<int>();
  Copy(lst1,?lst2);
  Console.WriteLine(lst2.Count);
 }

}

Copy()方法就是一個泛型方法,它與參數化的類型T一起工作。當在Main()中激活Copy()時,編譯器根據提供給Copy()方法的參數確定出要使用的具體類型。
posted on 2005-08-19 23:24 海盜 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/Grisson/archive/2005/08/19/218844.html

總結

以上是生活随笔為你收集整理的深入浅出.NET泛型编程(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。