日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
掌握C#自定義泛型類:從初始化說起

Generic是Framework 2.0的新元素,中文名字稱之為“泛型” ,特征是一個(gè)帶有尖括號(hào)的類,比如List< T>

C#自定義泛型類用得最廣泛,就是集合(Collection)中。實(shí)際上,泛型的產(chǎn)生其中一個(gè)原因就是為了解決原來集合類中元素的裝箱和拆箱問題(如果對(duì)裝箱和拆箱概念不明,請(qǐng)百度搜索)。由于泛型的使用,使得集合內(nèi)所有元素都屬于同一類,這就把類型不同的隱患消滅在編譯階段——如果類型不對(duì),則編譯錯(cuò)誤。

這里只討論C#自定義泛型類?;咀远x如下:

 
 
 
  1. public class MyGeneric < T>  
  2. ...{  
  3.     private T member;  
  4.     public void Method (T obj)  
  5.     ...{  
  6.     }  

這里,定義了一個(gè)泛型類,其中的T作為一個(gè)類,可以在定義的類中使用。當(dāng)然,要定義多個(gè)泛型類,也沒有問題。

 
 
 
  1. public class MyGeneric < TKey, TValue>  
  2. ...{  
  3.      private TKey key;  
  4.      private TValue value;  
  5.  
  6.      public void Method (TKey k, TValue v)  
  7.      ...{  
  8.      }  
  9. }  

泛型的初始化:泛型是需要進(jìn)行初始化的。使用T doc = default(T)以后,系統(tǒng)會(huì)自動(dòng)為泛型進(jìn)行初始化。

限制:如果我們知道,這個(gè)將要傳入的泛型類T,必定具有某些的屬性,那么我們就可以在MyGeneric< T>中使用T的這些屬性。這一點(diǎn),是通過interface來實(shí)現(xiàn)的。

 
 
 
  1. // 先定義一個(gè)interface  
  2. public interface IDocument  
  3. ...{  
  4.    string Title ...{get;}  
  5.    string Content ...{get;}  
  6. }  
  7.  
  8. // 讓范型類T實(shí)現(xiàn)這個(gè)interface  
  9. public class MyGeneric < T>  
  10. where T : IDocument  
  11. ...{  
  12.      public void Method(T v)  
  13.      ...{  
  14.           Console.WriteLine(v.Title);  
  15.      }  
  16. }  
  17.  
  18. // 傳入的類也必須實(shí)現(xiàn)interface  
  19. public class Document : IDocument  
  20. ...{  
  21. ......  
  22. }  
  23.  
  24. // 使用這個(gè)泛型  
  25. MyGeneric< Document> doc = new MyGeneric< Document>(); 

泛型方法:我們同樣可以定義泛型的方法

 
 
 
  1. void Swap< T> (ref T x, ref T y)  
  2. ...{  
  3. T temp = x;  
  4. x = y;  
  5. y = temp;  
  6. }  

泛型代理(Generic Delegate):既然能夠定義泛型方法,自然也可以定義泛型代理

 
 
 
  1. public delegate void delegateSample < T> (ref T x, ref T y)  
  2.  
  3. private void Swap (ref T x, ref T y)  
  4. ...{  
  5.     T temp = x;  
  6.     x = y;  
  7.     y = temp;  
  8. }  
  9.  
  10. // 調(diào)用  
  11. public void Run()  
  12. ...{  
  13.    int i,j;  
  14.    i = 3;  
  15.    j = 5;  
  16.    delegateSample< int> sample = new delegateSample< int> (Swap);  
  17.    sample(i, j);  

設(shè)置可空值類型:一般來說,值類型的變量是非空的。但是,Nullable< T>可以解決這個(gè)問題。

 
 
 
  1. Nullable< int> x;   // 這樣就設(shè)置了一個(gè)可空的整數(shù)變量x  
  2. x = 4;  
  3. x += 3;  
  4. if (x.HasValue)   // 使用HasValue屬性來檢查x是否為空  
  5. ...{ Console.WriteLine ("x="+x.ToString());  
  6. }  
  7. x = null;    // 可設(shè)空值 

使用ArraySegment< T>來獲得數(shù)組的一部分。如果要使用一個(gè)數(shù)組的部分元素,直接使用ArraySegment來圈定不失為一個(gè)不錯(cuò)的辦法。

 
 
 
  1. int[] arr = ...{1, 2, 3, 4, 5, 6, 7, 8, 9};  
  2. // ***個(gè)參數(shù)是傳遞數(shù)組,第二個(gè)參數(shù)是起始段在數(shù)組內(nèi)的偏移,第三個(gè)參數(shù)是要取連續(xù)多少個(gè)數(shù)  
  3. ArraySegment< int> segment = new ArraySegment< int>(arr, 2, 3);  // (array, offset, count)   
  4.  
  5. for (int i = segment.Offset; i< = segment.Offset + segment.Count; i++)  
  6. ...{  
  7.    Console.WriteLine(segment.Array[i]);    // 使用Array屬性來訪問傳遞的數(shù)組  

在例子中,通過將Offset屬性和Count屬性設(shè)置為不同的值,可以達(dá)到訪問不同段的目的。

以上就是C#自定義泛型類的用法介紹。


網(wǎng)站名稱:掌握C#自定義泛型類:從初始化說起
網(wǎng)頁URL:http://www.dlmjj.cn/article/djsgphc.html