自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C# 泛型編程基礎(chǔ)實(shí)例詳解

開(kāi)發(fā) 后端
C# 泛型編程基礎(chǔ)實(shí)例主要通過(guò)一個(gè)實(shí)例的分析向你介紹C# 泛型編程基礎(chǔ)需要掌握的知識(shí),和需要注意的方面,希望對(duì)你學(xué)習(xí)C# 泛型編程基礎(chǔ)有所幫助。

C# 泛型編程基礎(chǔ)學(xué)習(xí):最顯著的一點(diǎn)就是它參數(shù)化了類型,把類型作為參數(shù)抽象出來(lái),從而使我們?cè)趯?shí)際的運(yùn)用當(dāng)中能夠更好的實(shí)現(xiàn)代碼的重復(fù)利用,同時(shí)它提供了更強(qiáng)的類型安全,更高的效率,不過(guò)在約束方面,它只支持顯示的約束,這樣在靈活性方面就顯得不是那么好了。我覺(jué)得它之所以能夠提供更高的效率是因?yàn)榉盒驮趯?shí)例化的時(shí)候采用了 "on-demand"的模式,即按需實(shí)例化,發(fā)生在JIT(Just In Time)編譯時(shí)。

下面來(lái)看如何定義一個(gè)C# 泛型類,很簡(jiǎn)單,你只需要意識(shí)到一點(diǎn),在這里,類型已經(jīng)被參數(shù)化了:

C# 泛型編程實(shí)例:

  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來(lái)實(shí)例化Test類   
  11.    Test t = new Test("SHY520",22);   
  12.    //調(diào)用泛型類中的方法   
  13.    t.SetValue();   
  14.   }   
  15.  }   
  16.  /**////   
  17.  /// 定義一個(gè)泛型類,該類有兩個(gè)類型參數(shù),分別是T,S   
  18.  ///   
  19.  /// 類型參數(shù)   
  20. /// 類型參數(shù)   
  21.  public class Test   
  22.  {   
  23.   //泛型類的類型參數(shù)可用于類成員   
  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# 泛型編程例子不是很恰當(dāng),目的是讓初學(xué)C# 泛型的你了解一下泛型的定義及實(shí)例化方法,如上,我們定義了一個(gè)泛型類,那么如何實(shí)現(xiàn)泛型類的繼承呢?這里需要滿足下面兩點(diǎn)中的任何一點(diǎn)即可:

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

2、父類的類型參數(shù)沒(méi)有被實(shí)例化,但來(lái)源于子類,也就是說(shuō)父類和子類都是泛型類,并且二者有相同的類型參數(shù);

  1. //如果這樣寫的話,顯然會(huì)報(bào)找不到類型T,S的錯(cuò)誤   
  2. public class TestChild : Test { }   
  3. //正確的寫法應(yīng)該是   
  4. public class TestChild : Test{ }   
  5. public class TestChild : Test { }   
  6. public class TestChild : Test { }  

接著我們來(lái)看看泛型接口,其創(chuàng)建以及繼承規(guī)則和上面說(shuō)的泛型類是一樣的,看下面的代碼:

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

在來(lái)看一下C# 泛型委托,首先我們定義一個(gè)類型參數(shù)為T的委托,然后在類中利用委托調(diào)用方法:

  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Text;   
  4. namespace GenericTest   
  5. {   
  6.  //定義一個(gè)委托,類型參數(shù)為T,返回值類型T   
  7.  //泛型委托支持在返回值和參數(shù)上應(yīng)用類型參數(shù)   
  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è)賮?lái)看C# 泛型方法,C#的泛型機(jī)制只支持在方法申明上包含類型參數(shù),也即是泛型方法。特別注意的是,泛型不支持在除了方法以外的其他類/接口成員上使用類型參數(shù),但這些成員可以被包含在泛型類型中,并且可以使用泛型類型的類型參數(shù)。還有一點(diǎn)需要說(shuō)的就是,泛型方法可以在泛型類型中,也可以存在于非泛型類型中。下面我們分別看一下泛型類型的申明,調(diào)用,重載和覆蓋。

  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Text;   
  4. namespace GenericTest   
  5. {   
  6.  class GenericClass   
  7.  {   
  8.   //申明一個(gè)泛型方法   
  9.   public T getvalue(T t)   
  10.   {   
  11.    return t;   
  12.   }   
  13.   //調(diào)用泛型方法   
  14.   //注意:在調(diào)用泛型方法時(shí),對(duì)泛型方法的類型參數(shù)實(shí)例化   
  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.  //要注意的是,泛型方法被覆蓋時(shí),約束被默認(rèn)繼承,不需要重新指定約束關(guān)系   
  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# 泛型編程基礎(chǔ)實(shí)例的基本內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C# 泛型編程基礎(chǔ)有所幫助。

【編輯推薦】

  1. C# 泛型基礎(chǔ)知識(shí)學(xué)習(xí)大全
  2. C# 泛型使用心得淺析
  3. C# 泛型集合概念及應(yīng)用淺析
  4. C# 泛型集合實(shí)例應(yīng)用淺析
  5. 淺析C# Dictionary泛型集合
責(zé)任編輯:仲衡 來(lái)源: tzwhx.com
相關(guān)推薦

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-08-24 15:12:13

C# 泛型接口

2009-09-02 17:38:16

C#泛型支持

2009-08-24 18:15:24

C# Dictiona

2009-08-24 15:38:21

C# 泛型數(shù)組

2009-06-24 10:25:25

C#泛型

2009-08-24 14:51:25

C# 泛型泛型類型

2009-08-24 14:43:35

C# 泛型

2009-08-24 14:26:42

C# 泛型類

2009-08-24 14:20:13

C# 強(qiáng)制類型轉(zhuǎn)換

2009-06-03 14:50:17

C# 4.0泛型協(xié)變性

2009-08-24 13:52:04

C# 泛型約束

2009-08-24 17:27:05

C#泛型應(yīng)用

2009-08-24 16:39:19

C# 泛型應(yīng)用

2009-09-01 16:14:11

C#泛型

2009-08-26 18:02:05

C#泛型問(wèn)題
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)