程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#泛型秘訣(2)(1)

C#泛型秘訣(2)(1)

編輯:關於C語言

4.3 獲取泛型的類型

問題

您需要在運行時獲得一個泛型類型實例的Type對象。

解決方案

在使用typeof操作符時提供類型參數;使用類型參數實例化的泛型類型,用GetType()方法。

聲明一個一般類型和一個泛型類型如下:

public class Simple
{
  public Simple()
  {
  }
}

public class SimpleGeneric<T>
{
  public SimpleGeneric()
  {
  }
}

使用typeof操作符和簡單類型的名稱就可以在運行時獲得簡單類型的類型。對於泛型類型來說,在調用typeof時類型參數必須要提供,但是簡單類型實例和泛型類型實例都可以使用相同的方式來調用GetType()。

Simple s = new Simple();
  Type t = typeof(Simple);
  Type alsoT = s.GetType();
  //提供類型參數就才可以獲得類型實例
  Type gtInt = typeof(SimpleGeneric<int>);
  Type gtBool = typeof(SimpleGeneric<bool>);
  Type gtString = typeof(SimpleGeneric<string>);
  // 當有一個泛型類實例時,您也可以使用GetType的舊的方式去調用一個實例。.
  SimpleGeneric<int> sgI = new SimpleGeneric<int>();
Type alsoGT = sgI.GetType();

討論

不能直接獲取泛型類的類型,因為如果不提供一個類型參數,泛型類將沒有類型(參考秘訣4.2獲得更多信息)。只有通過類型參數實例化的泛型類才有Type。

如果您在使用typeof操作符時,只提供泛型類型定義而不提供類型參數,將得到下面的錯誤:

// 這產生一個錯誤:
  // Error 26 Using the generic type 'CSharpRecipes.Generics.SimpleGeneric<T>'
  // requires '1' type arguments
  Type gt = typeof(SimpleGeneric);

閱讀參考

查看秘訣4.2;參考MSDN文檔中的“typeof”主題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved