Guid是原始类型还是复杂类型?

时间:2011-09-19 18:55:48

标签: c# .net object types casting

我们通过我们正在扩展的基本类型和复杂类型来分离扩展方法类。我的问题很简单。将Guid与string,int,DateTime等一起视为原始类型吗?或者在描述它时会被认为是一种复杂的类型吗?

更新

在回顾了答案之后,我非常感谢我能够从一些答案中收集到的澄清。然而,我的印象是好奇心<罢工>杀死了猫让猫被谋杀了,所以我投票决定关闭我自己的问题。

4 个答案:

答案 0 :(得分:4)

这取决于你所谓的“原始数据类型”。

Wikipedia列出了这两个定义:

  • 基本类型是由编程语言提供的数据类型作为基本构建块。大多数语言允许从基本类型开始递归构造更复杂的复合类型。
  • 内置类型是编程语言提供内置支持的数据类型。

根据第一个,Guid是一个构造类型,一个原语。

根据第二个,它也是一个基本类型(因为它在BCL中提供,在System命名空间中,并且不是由任何.NET定义的语言)。


更新

这就是Type类的IsPrimitive方法所说的内容:

  

基本类型包括Boolean,Byte,SByte,Int16,UInt16,Int32,UInt32,Int64,UInt64,IntPtr,UIntPtr,Char,Double和Single。

因此,就.NET而言,是一种原始类型。


总结:根据上述三个单独的标准,Guid 绝对不是原始类型。

答案 1 :(得分:2)

根据你的定义,Guid将是一个原始的。它是一个类似intDateTime的结构。它也由System命名空间中的.NET Framework提供。另外,它是不可变的,如stringDateTime

根据.NET的定义,它不是。

请参阅http://msdn.microsoft.com/en-us/library/system.type.isprimitive.aspx

我会将其归为与intDateTimestring相同的类别。

答案 2 :(得分:2)

这个问题的答案有些模糊。

语言规范声明:

  

也可以使用结构和运算符重载来实现C#语言中的新“原始”类型

这似乎意味着Guid是一种“原始”类型。但是,Type提供了IsPrimitive属性,typeof(Guid).IsPrimitive将返回false

但请注意,Guid不是由语言提供的,而是由.NET Framework提供的。

语言规范还指出C#中的原始类型是Booleanbool),Bytebyte),SByte({{1 }}),sbyteInt16),shortUInt16Int32),UInt32(int),uintInt64),UInt64(long),ulongIntPtrUIntPtrChar),char({{ 1}})和Doubledouble)明显地遗漏了Singlesingle

我会完全丢失描述符“primitive”,只是将DateTime称为值类型。

答案 3 :(得分:0)

这取决于你所谓的“原始类型”。 Type Fundamentals文章说:“编译器直接支持的任何数据类型都称为基本类型。”我不希望编译器“知道”System.Guid

文章Primitive data types in C#未在原始类型中列出System.Guid

有人可能认为它必须是复合类型,因为它是一个由多个其他基元组成的128位实体。

我会说GUID不是原始类型,但你可能会得到其他不同意我的人。