.NET Framework中的通用类型系统支持以下五种类型:

 类

 结构

 枚举

 接口

 委托

把你的光标放在你要查找的类型上面,按F12可以导航到这个类型的定义的位置你会看到他是属于什么类型修饰的,就是修饰符后面的看它否和以上五种的哪一种类型,从而得到相应的类型。如;int 类型 按F12可以看到命名空间下面第一句代码就是:public struct Int32 可以看见public 后面的是stuck 那么struck就是结构,那么int就是值类型。如果是sealed,那么就是符合类了,那么就是引用类型。

希望大家能学到如何获取当前类型是引用类型还是值类型!

类:class

类是可以直接从另一个类派生以及从System.Object隐式派生的引用类型。类具有的一些特征一下是:

 

 

特征说明
sealed指定不能从此类型派生出另一个类
implements指出该类通过提供接口成员的是实现,使用一个或接口
abstract指出无法实例化类,若要使用它,必须由其派生出另一个类
inherits

指出可以在指定了基类的任何地方使用类的实例。从基类继承的派生类可以使用基类提供的任何公共成员的实现,派生类也可以用自己的实现重写这些公共成员的实现。

exported或notexported

指出某个类在定义它的程序集之外是否可见。此特征仅适用于顶级类,不适用于嵌套类。

 

结构:struct

结构是值类型,是隐式从System.ValueType派生的,对于表示内存要求很小的值以及将值作为按值参数传递给具有强类型参数的方法,结构很有用。在 .NET Framework 类库中,所有基元数据类型( BooleanByteCharDateTimeDecimalDoubleInt16Int32Int64SByteSingleUInt16UInt32UInt64)都定义为结构。

枚举:

枚举(enum)是一种值类型,该值类型直接从System.Enum继承并为基础基元类型的值提供替代名称。

接口:interface

接口是引用类型,接口定义用于指定“可以执行”关系或“具有”关系的协定。接口通常用于实现某种功能,如比较和排序( IComparableIComparable(Of T) 接口)、测试相等性( IEquatable(Of T) 接口)或枚举集合中的项( IEnumerableIEnumerable(Of T) 接口)。 接口可具有属性、方法和事件,所有这些都是抽象成员;也就是说,虽然接口定义这些成员及其签名,但每个接口成员的功能由实现该接口的类型定义。这意味着实现接口的任何类或结构都必须为该接口中声明的抽象成员提供定义。接口也可以要求任何实现类或结构实现一个或多个其他接口。

对接口有以下限制:

  • 接口可以用任何可访问性来声明,但接口成员必须全都具有公共可访问性。

  • 接口不能定义构造函数。

  • 接口不能定义字段。

  • 接口只能定义实例成员。它们不能定义静态成员。

每种语言都必须提供映射规则,将实现映射到需要该成员的接口,因为多个接口可以使用同一个签名声明成员,而这些成员可以分别具有单独的实现。

委托:

委托是用途类似于 C++ 中的函数指针的引用类型。它们用于 .NET Framework 中的事件处理程序和回调函数。与函数指针不同,委托是安全、可验证和类型安全的。委托类型可以表示任何具有兼容签名的实例方法或静态方法。

如果委托参数的类型的限制性强于方法参数的类型,则该委托的参数与该方法的相应参数兼容,因为这可保证传递给委托的参数可以安全地传递给方法。

同样,如果方法的返回类型的限制性强于委托的返回类型,则该委托的返回类型与该方法的返回类型兼容,因为这可保证方法的返回值可以安全地强制转换为委托的返回类型。

例如,具有类型为 IEnumerable 的参数和 Object 返回类型的委托可以表示具有类型为 Object 的参数和类型为 IEnumerable 的返回值的方法。 有关更多信息及示例代码,请参见 Delegate. CreateDelegate(Type, Object, MethodInfo)

委托一般绑定到它表示的方法。除了绑定到方法之外,委托还可以绑定到对象。该对象表示方法的第一个参数,每次调用委托时将该对象传递给方法。如果方法是实例方法,则将绑定的对象作为隐式 this 参数(在 Visual Basic 中为 Me)传递;如果方法为静态方法,则将该对象作为方法的第一个形参传递,并且委托签名必须匹配其余参数。 有关更多信息及示例代码,请参见 System. Delegate

所有委托从 System. MulticastDelegate (继承自 System. Delegate )继承。 C#、Visual Basic 和 C++ 语言不允许从这些类型继承,而是提供了用于声明委托的关键字。

由于委托从 MulticastDelegate 继承,因此委托具有一个调用列表,其中列出了委托表示的方法,在调用委托时将执行该列表中的方法。 列表中的所有方法接收调用委托时提供的参数。