【发布时间】:2013-05-06 20:23:18
【问题描述】:
我在编写一些处理反射的辅助函数时正在思考这个问题。 C#中除了classes、structs、enums和interfaces还有什么别的吗?如果我编写一个检查class、struct、enum 和interface 的函数,那会是包罗万象的函数吗?
我读到delegates 无论如何都是类here 和here。
帮助我完善我对这种层次结构的想法:
reference type value type
| |
--------------- ----------
| | | |
interface class struct enum
// the all encompassing function - pseudo code:
public static bool IsC#Stuff(this Type type)
{
return type.IsEnum || type.IsStruct || type.IsClass || type.IsInterface;
}
我错过了什么吗?
【问题讨论】:
-
指针和几种引用(例如用于
ref参数的那些) -
@asawyer 代表无论如何都是内部的类。由
typeof(Func<>).IsClass确认。但我不知道你为什么说泛型。 -
请注意您的层次结构:值类型可以实现接口以及引用类型..
-
泛型提出了一个有趣的例子:泛型类型/方法中的
T可以是要么 值类型 或 引用类型;有特殊的操作码(“unbox any”和“constrained”)来允许这项工作 -
@nawfal: 数组和委托instances很像其他堆对象实例,但是数组和委托类型描述(即@987654336的实例@ 定义数组和委托类型)是特殊的,因为它们封装了其他类型。如果泛型是 NET 1.0 规范的一部分,那么委托和数组的处理方式可能与其他泛型类型大致相同,但需要进行特殊处理以使其成为准泛型。
标签: c# .net class types struct