簡體   English   中英

“通用類型”是什么意思? 在.net中:x.GetType()。IsGenericType

[英]What does “Generic Type” mean? in .net : x.GetType().IsGenericType

我已經找到了Java通用類型的解釋,但是我確實理解Java和.net的通用類型之間存在主要差異

例如,我執行以下操作,但我無法找出其真正含義。

   List<int> list = new List<int>();
   Console.WriteLine( list.GetType().IsGenericType);

MSDN鏈接僅聲明“獲取一個值,該值指示當前類型是否為通用類型。”,但未說明通用類型的含義。

泛型類型是否意味着它是從Object類繼承的?

泛型類型與Abstract類有關嗎?

.net泛型的定義是什么-我如何根據自己的邏輯確定它是否為泛型(以了解概念)

首先要回答您的兩個問題:

  1. .NET中的所有類型,泛型和其他類型都源自Object
  2. 泛型類型可以像其他任何類型一樣是抽象的,但不必一定是抽象的。 如果創建抽象泛型類型,則需要從中派生非抽象類型,以便能夠從中實例化對象。

要確定類型是否為通用類型,只需查看類定義即可。 Queue不是通用類型,而Queue<T>是通用類型,因為您可以通過將通用類型參數 T替換為任何其他類型來獲得不同的類型。 例如, Queue<int>Queue<string>Queue<Object>等都使用在Queue<T>類中一次定義的相同代碼。 請注意,它們本身也是通用類型。 嵌套在通用類型中的嵌套類型也被視為通用類型。 “基本類型” Queue<T>被稱為通用類型定義

public abstract class MyListBase { }
public abstract class MyListBase<T> : MyListBase { }
public class MyList<T> : MyListBase<T>
{
    public class Nested { }
}
public class MyStringList : MyList<string> { }

...

var isGenericType0 = typeof(MyListBase).IsGenericType; //False
var isGenericType1 = typeof(MyListBase<>).IsGenericType; //True
var isGenericType2 = typeof(MyListBase<>)
    .MakeGenericType(typeof(char)).IsGenericType; //True
var myIntegerList = new MyList<int>();
var isGenericType3 = myIntegerList.GetType().IsGenericType; //True
var myNested1 = new MyList<int>.Nested();
var isGenericType4 = myNested1.GetType().IsGenericType; //True
var myStringList = new MyStringList();
var isGenericType5 = myStringList.GetType().IsGenericType; //False

希望您現在可以繞過泛型類型。

泛型使您可以根據其作用的確切數據類型定制方法,類,結構或接口。

泛型類型定義是用作模板的類,結構或接口聲明,帶有可包含或使用的類型的占位符。 例如,System.Collections.Generic.Dictionary類可以包含兩種類型:鍵和值。 因為通用類型定義只是模板,所以不能創建作為通用類型定義的類,結構或接口的實例。

public class Generic<T>
{
    public T Field;
}

在答案中很難描述什么是.NET中的泛型。 最好閱讀文檔。

簡而言之,它是С++中的模板,Java中的泛型,.NET,Delphi。 此處常見說明

https://zh.wikipedia.org/wiki/Generic_programming

來自MSDN的文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM