是否所有Type类都继承自RuntimeType



我想知道类型为Type的on对象实际上是正常类(例如Object, Int32等)的类型还是元对象(例如typeof(Object), typeof(Int32)等)的类型。

对象的类型我的意思是:

Type t = typeof(Object);
Console.WriteLine("Type is {0}", t.FullName);

类型为System。对象

和类型对象的类型,即元对象:

Type t = typeof(Object).GetType();
Console.WriteLine("Type is {0}", t.FullName);

类型为System。RuntimeType

我在TypeTypeInfo中找不到任何方法/属性来判断Type对象所针对的对象是否实际上是Type而不是普通对象。

如果我有对象,我可以这样做:

bool IsType(object o) { return o is Type; }

但是,我没有对象本身,只有它的类型

我希望是这样的:

bool IsType(Type t) { return t.GetTypeInfo().IsType; }

但似乎没有什么比这更好的了。

所以到目前为止我唯一能想到的是:

bool IsType(Type type)
{
    // Can't use typeof(RuntimeType) due to its protection level
    Type runtimeType = typeof(Object).GetType();
    return runtimeType.Equals(type);
}

然而,我不能确定GetType()类型的所有对象的Type将返回RuntimeType,也不是他们实际上继承它…

更新

让我解释一下。我在写一个序列化程序。当序列化类成员(例如字段或属性)时,我将拥有字段类型(而不是对象)。成员完全有可能是Type类型。我也希望能够序列化这些对象。

例如:

class MyClass {
    private Type _cachedType;
}

我将通过反射获得字段_cachedType的类型。我怎么知道对象是一个Type摆在首位?

好的,我认为整个问题归结为

如何确定字段的类型为Type ?

据我所知,您不关心存储在那里的值的实际类型,因为您将以相同的方式序列化它们("然后我可以简单地使用type . assemblyqualifiedname将它们序列化为字符串")。

给你:

bool IsType(Type type)
{
    return type == typeof(Type);
}

不需要子类检查。实际对象将属于子类,但字段类型为Type

可以添加子类check:

bool IsType(Type type)
{
    return typeof(Type).IsAssignableFrom(type);
}

我想我明白了。我可以用TypeInfo.IsAssignableFrom

bool IsType(Type type)
{
    TypeInfo info = typeof(Type).GetTypeInfo();
    return info.IsAssignableFrom(type.GetTypeInfo());
}

大致相当于在对象上使用is操作符,但这种类型是运行时类型

相关内容

  • 没有找到相关文章

最新更新