c# – 类不从对象继承?

前端之家收集整理的这篇文章主要介绍了c# – 类不从对象继承?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用一种使用反射来检查方法的参数类型的方法.该方法遍历ParameterInfo,并且正在使用这些参数的类型.

我总是假设如果TypeInfo.IsClass为true,那么这个类型是一个类,并且始终从类型对象派生(间接)(除非当类型是对象本身时).因此,如果TypeInfo.IsClass为true,则必须设置TypeInfo.BaseType.

那我的假设是错的!有类不能从类型对象派生.我的假设搞砸了我的代码.

例如:

Type type = typeof(int).MakeByRefType();

type.IsClass将为true,type.BaseType将为null.

如果你考虑,这是合乎逻辑的.我可以通过检查TypeInfo.IsByRef来防止我的代码崩溃.

现在我的问题是:是否有更多这样的“异国情调”类型(包括ByRef类型和类型对象),它们是一个类(IsClass == true),但没有基类型(BaseType == null)?

在你回答之前:我只是引用IsClass == true的类型!而我的int类型的例子只是一个例子.它可能是任何类型.
所以请不要:

>接口
>结构
>空虚

答案到目前为止

> ByRef类型(T&):作为问题中的描述.
>指针类型(T *):由Mark Gravell发现.

解决方法

我会说IsClass在这里只是误导.它指出:

Gets a value indicating whether the System.Type is a class; that is,not a value type or interface.

它以这种方式实现:它检查标志是否包括Interface,以及它是否是ValueType.

不幸的是,这里有更多的东西.指针不是管理类型. by-ref与指针非常相似.指针不是对象,尽管通常使用该转换实际上是一个取消引用/转换.同样适用于诸如直接指针(如int *)的东西.

不是.NET中的一切都是对象:)

var baseType = typeof(int*).BaseType; // null
bool liesAndMoreLies = typeof(int*).IsClass; // true

Eric Lippert covers this more here: Not everything derives from object – 并列出了一些其他例子(例如打开通用类型).

猜你在找的C#相关文章