BaseType为函数泛型类型参数返回什么?

时间:2017-10-25 03:33:21

标签: c#

给出以下代码段:

using System;

public void doStuff<T>() where T : class 
{
    Type foo = typeof(T).BaseType;
}

Type foo反映的内容是什么?它是否代表type参数中给出的类型?

例如,如果我致电doStuff<int>(),那么foo会反映int&#39; s Type吗?

2 个答案:

答案 0 :(得分:2)

BaseType的元数据说

// Summary:
    // Gets the type from which the current System.Type directly inherits.
//
// Returns:
    // The System.Type from which the current System.Type directly inherits, or null
    // if the current Type represents the System.Object class or an interface.
//

因此,如果您的类没有继承或只是实现接口,那么它将返回Object,否则返回您的父类类型。

深思熟虑:你不能在这里使用int,因为int是struct而不是class。如果您更改代码以获取struct,那么它将返回System.ValueType

答案 1 :(得分:1)

.BaseType将返回您正在评估的当前类型直接继承自的类型。因此,如果传入继承自类型A的类型B,则typeof(B).BaseType将返回A.

对于示例,int是值类型,它是一个结构。我相信结构隐式地从ValueType继承。

顺便说一句,你不能将int传递给定义的方法,因为泛型约束只限于类,其中int不与所有其他值类型一起使用。

一些链接了解更多信息:

MSDN BaseType

MSDN ValueType