成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C# 泛型編程基礎實例詳解

開發 后端
C# 泛型編程基礎實例主要通過一個實例的分析向你介紹C# 泛型編程基礎需要掌握的知識,和需要注意的方面,希望對你學習C# 泛型編程基礎有所幫助。

C# 泛型編程基礎學習:最顯著的一點就是它參數化了類型,把類型作為參數抽象出來,從而使我們在實際的運用當中能夠更好的實現代碼的重復利用,同時它提供了更強的類型安全,更高的效率,不過在約束方面,它只支持顯示的約束,這樣在靈活性方面就顯得不是那么好了。我覺得它之所以能夠提供更高的效率是因為泛型在實例化的時候采用了 "on-demand"的模式,即按需實例化,發生在JIT(Just In Time)編譯時。

下面來看如何定義一個C# 泛型類,很簡單,你只需要意識到一點,在這里,類型已經被參數化了:

C# 泛型編程實例:

  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Text;   
  4. namespace GenericTest   
  5. {   
  6.  class Program   
  7.  {   
  8.   static void Main(string[] args)   
  9.   {   
  10.    //使用string,int來實例化Test類   
  11.    Test t = new Test("SHY520",22);   
  12.    //調用泛型類中的方法   
  13.    t.SetValue();   
  14.   }   
  15.  }   
  16.  /**////   
  17.  /// 定義一個泛型類,該類有兩個類型參數,分別是T,S   
  18.  ///   
  19.  /// 類型參數   
  20. /// 類型參數   
  21.  public class Test   
  22.  {   
  23.   //泛型類的類型參數可用于類成員   
  24.   private T name;   
  25.   private S age;   
  26.   public Test(T Name,S Age)   
  27.   {   
  28.    this.name = Name;   
  29.    this.age = Age;   
  30.   }   
  31.   public void SetValue()   
  32.   {   
  33.    Console.WriteLine(name.ToString());   
  34.    Console.WriteLine(age.ToString());   
  35.   }   
  36.  }   
  37. }  

上面的C# 泛型編程例子不是很恰當,目的是讓初學C# 泛型的你了解一下泛型的定義及實例化方法,如上,我們定義了一個泛型類,那么如何實現泛型類的繼承呢?這里需要滿足下面兩點中的任何一點即可:

1、C# 泛型類繼承中,父類的類型參數已被實例化,這種情況下子類不一定必須是C# 泛型類;

2、父類的類型參數沒有被實例化,但來源于子類,也就是說父類和子類都是泛型類,并且二者有相同的類型參數;

  1. //如果這樣寫的話,顯然會報找不到類型T,S的錯誤   
  2. public class TestChild : Test { }   
  3. //正確的寫法應該是   
  4. public class TestChild : Test{ }   
  5. public class TestChild : Test { }   
  6. public class TestChild : Test { }  

接著我們來看看泛型接口,其創建以及繼承規則和上面說的泛型類是一樣的,看下面的代碼:

  1. public interface IList   
  2. {   
  3.  T[] GetElements();   
  4. }   
  5. public interface IDictionary   
  6. {   
  7.  void Add(K key, V value);   
  8. }   
  9. // 泛型接口的類型參數要么已實例化   
  10. // 要么來源于實現類聲明的類型參數   
  11. class List : IList, IDictionary   
  12. {   
  13.  public T[] GetElements() { return null; }   
  14.  public void Add(int index, T value)   
  15.  {}   
  16. }  

在來看一下C# 泛型委托,首先我們定義一個類型參數為T的委托,然后在類中利用委托調用方法:

  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Text;   
  4. namespace GenericTest   
  5. {   
  6.  //定義一個委托,類型參數為T,返回值類型T   
  7.  //泛型委托支持在返回值和參數上應用類型參數   
  8. delegate string GenericDelete(T value);   
  9.  class test   
  10.  {   
  11.   static string F(int i) { return "SHY520"; }   
  12.   static string G(string s) { return "SHY520"; }   
  13.   static void Main(string[] args)   
  14.   {   
  15.    GenericDelete G1 = G;   
  16.    GenericDelete G2 = new GenericDelete(F);   
  17.   }   
  18.  }   

我們再來看C# 泛型方法,C#的泛型機制只支持在方法申明上包含類型參數,也即是泛型方法。特別注意的是,泛型不支持在除了方法以外的其他類/接口成員上使用類型參數,但這些成員可以被包含在泛型類型中,并且可以使用泛型類型的類型參數。還有一點需要說的就是,泛型方法可以在泛型類型中,也可以存在于非泛型類型中。下面我們分別看一下泛型類型的申明,調用,重載和覆蓋。

  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Text;   
  4. namespace GenericTest   
  5. {   
  6.  class GenericClass   
  7.  {   
  8.   //申明一個泛型方法   
  9.   public T getvalue(T t)   
  10.   {   
  11.    return t;   
  12.   }   
  13.   //調用泛型方法   
  14.   //注意:在調用泛型方法時,對泛型方法的類型參數實例化   
  15.   public int useMethod()   
  16.   {   
  17.    return this.getvalue(10);   
  18.   }   
  19.   //重載getvalue方法   
  20.   public int getvalue(int i)   
  21.   {   
  22.    return i;   
  23.   }   
  24.  }   
  25.  //下面演示覆蓋   
  26.  //要注意的是,泛型方法被覆蓋時,約束被默認繼承,不需要重新指定約束關系   
  27.  abstract class Parent   
  28.  {   
  29.   public abstract K TEST(K k, V v) where K : V;   
  30.  }   
  31.  class Child : Parent   
  32.  {   
  33.   public override T TEST(T t, S s)   
  34.   {   
  35.    return t;   
  36.   }   
  37.  }   
  38. }   
  39.  

C# 泛型編程基礎實例的基本內容就向你介紹到這里,希望對你了解和學習C# 泛型編程基礎有所幫助。

【編輯推薦】

  1. C# 泛型基礎知識學習大全
  2. C# 泛型使用心得淺析
  3. C# 泛型集合概念及應用淺析
  4. C# 泛型集合實例應用淺析
  5. 淺析C# Dictionary泛型集合
責任編輯:仲衡 來源: tzwhx.com
相關推薦

2009-12-24 09:16:11

C#泛型

2009-08-24 17:58:19

C# 泛型集合

2009-08-24 10:37:27

C# 泛型

2009-08-24 17:07:09

C# 泛型

2009-08-26 09:36:03

C#泛型

2009-06-24 10:25:25

C#泛型

2009-08-24 14:51:25

C# 泛型泛型類型

2009-08-24 15:38:21

C# 泛型數組

2009-08-24 14:43:35

C# 泛型

2009-08-24 14:26:42

C# 泛型類

2009-09-02 17:38:16

C#泛型支持

2009-08-24 15:12:13

C# 泛型接口

2009-08-24 18:15:24

C# Dictiona

2009-08-24 14:20:13

C# 強制類型轉換

2009-06-03 14:50:17

C# 4.0泛型協變性

2009-08-24 13:52:04

C# 泛型約束

2009-08-26 18:02:05

C#泛型問題

2009-09-02 18:03:19

C#實現泛型類

2009-08-24 10:29:39

C# 泛型

2009-08-24 11:35:20

C# 泛型應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品精品视频一区二区三区 | 精品国产乱码久久久久久闺蜜 | 国产精品福利网站 | 不卡一区二区三区四区 | 天天天天操| 日韩av啪啪网站大全免费观看 | 日日干干夜夜 | 日韩视频一区二区 | av在线播放网站 | 丁香婷婷综合激情五月色 | 欧美高清一级片 | 新超碰97| 国产一区二区三区在线 | 日韩a级片| 国产男人的天堂 | 久久久蜜桃一区二区人 | www.日韩欧美| 中文字幕高清免费日韩视频在线 | 中文字幕不卡在线88 | 日韩男人天堂 | 日本高清中文字幕 | 精品国产一级片 | 国产精品久久久久久久久久免费看 | 一二三四在线视频观看社区 | 91视视频在线观看入口直接观看 | 成人av观看| 国产精品3区 | 草草视频在线播放 | 成人在线精品视频 | 激情欧美一区二区三区中文字幕 | 亚洲3p| 久久久久久国产一区二区三区 | 欧美a在线| 亚洲精品亚洲人成人网 | 天天综合网91 | 国产精品99久久久久久宅男 | 欧美日韩高清在线一区 | 欧美日韩不卡合集视频 | 国产区在线 | 天天干天天操天天射 | 成人免费视频网站在线观看 |