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

时间:2016-02-15 08:24:57

标签: .net generics

我找到了java通用类型的解释,但我确实理解Java和.net的泛型类型之间存在重大差异

E.g。我运行以下内容,但我无法找到它的真正含义。

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

MSDN link只是声明“获取一个值,指示当前类型是否为泛型类型。”,但它没有说明泛型类型是什么意思

Generic Type是否意味着它继承自Object class

Generic Type是否与Abstract类有关?

.net通用类型的定义是什么 - 我如何根据自己的逻辑确定它是否是通用类型(为了理解这个概念)

3 个答案:

答案 0 :(得分:1)

首先回答你的两个问题:

  1. .NET中的所有类型,泛型类型和其他类型都来自Object
  2. 泛型类型可以像任何其他类型一样抽象,但不一定是这样。如果你创建一个抽象泛型类型,你需要从中派生一个非抽象类型,以便能够从中实例化一个对象。
  3. 要确定某个类型是否是通用类型,只需查看类定义即可。 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
    

    希望你现在可以绕过通用类型。

答案 1 :(得分:0)

泛型允许您根据其所处理的精确数据类型定制方法,类,结构或接口。

泛型类型定义是用作模板的类,结构或接口声明,包含可包含或使用的类型的占位符。例如,System.Collections.Generic.Dictionary类可以包含两种类型:键和值。由于泛型类型定义只是一个模板,因此您无法创建作为泛型类型定义的类,结构或接口的实例。

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

答案 2 :(得分:0)

在回答中很难描述.NET中的Generic是什么。阅读文档会更好。

简而言之,它是С++中的模板,Java,.NET,Delphi中的Generic。这里的常见描述

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

来自MSDN

的文档