给出以下代码段:
using System;
public void doStuff<T>() where T : class
{
Type foo = typeof(T).BaseType;
}
Type
foo
反映的内容是什么?它是否代表type参数中给出的类型?
例如,如果我致电doStuff<int>()
,那么foo会反映int
&#39; s Type
吗?
答案 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不与所有其他值类型一起使用。
一些链接了解更多信息: