加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 类不从对象继承?

发布时间:2020-12-15 17:45:32 所属栏目:百科 来源:网络整理
导读:我正在使用一种使用反射来检查方法的参数类型的方法.该方法遍历ParameterInfo,并且正在使用这些参数的类型. 我总是假设如果TypeInfo.IsClass为true,那么这个类型是一个类,并且始终从类型对象派生(间接)(除非当类型是对象本身时).因此,如果TypeInfo.IsClass为
我正在使用一种使用反射来检查方法的参数类型的方法.该方法遍历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 – 并列出了一些其他例子(例如打开通用类型).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读