C# Guid是基本类型还是复杂类型?

C# Guid是基本类型还是复杂类型?,c#,.net,object,types,casting,C#,.net,Object,Types,Casting,我们通过扩展的基本类型和复杂类型来分离扩展方法类。我的问题很简单。Guid与字符串、int、DateTime等一起被视为基本类型吗?或者在描述它时,它会被认为是一个复杂类型吗 更新 在回顾了答案之后,我非常感谢从一些答案中得到的澄清。然而,我得到的印象是好奇杀死了猫,让猫被谋杀了,所以我投票结束我自己的问题。根据你的定义,Guid将是一个原始的。它的结构类似于int,DateTime。它也由系统命名空间中的.NET Framework提供。另外,它是不可变的,比如string和DateTime

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

更新
在回顾了答案之后,我非常感谢从一些答案中得到的澄清。然而,我得到的印象是好奇杀死了猫,让猫被谋杀了,所以我投票结束我自己的问题。

根据你的定义,Guid将是一个原始的。它的结构类似于
int
DateTime
。它也由
系统
命名空间中的.NET Framework提供。另外,它是不可变的,比如
string
DateTime

根据.NET的定义,它不是


我会把它归为
int
DateTime
string

的同一类,对此的答案有些模糊

语言规范规定:

还可以使用结构和运算符重载在C#语言中实现新的“基元”类型

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

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

语言规范还规定,C语言中的基本类型为
Boolean
bool
)、
Byte
Byte
)、
SByte
SByte
)、
Int16
short
)、
UInt16
UInt16
Int32
int
)、UInt32(
int
)、
long
)、UInt64(
ulong
)、
IntPtr
UIntPtr
Char
Char
)、
Double
)、和
Single
Single
)明显省略了
DateTime
Guid


我将完全失去描述符“primitive”,而只将
Guid
作为值类型引用。

这取决于您所称的“primitive数据类型”

列出这两个定义:

  • 基本类型是编程语言作为基本构造块提供的数据类型。大多数语言允许从基本类型开始递归构造更复杂的复合类型
  • 内置类型是编程语言提供内置支持的数据类型
根据第一种方法,
Guid
是一种构造类型,不是原语

根据第二种,它也是而不是一种基本类型(如BCL中所提供的
系统
名称空间中所提供的,并且不由任何.NET语言定义)


更新:

这是
类型的方法所说的:

基本类型有布尔型、字节型、SByte型、Int16型、UInt16型、Int32型、UInt32型、Int64型、UInt64型、IntPtr型、UIntPtr型、字符型、双精度型和单精度型

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



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

这取决于你所称的“原始类型”。文章说,“编译器直接支持的任何数据类型都称为原始类型。”。我不期望编译器“知道”关于
System.Guid

本文没有在基本类型中列出
System.Guid

有人可能会说它必须是复合类型,因为它是一个128位的实体,由多个其他原语组成


我会说GUID不是一种基本类型,但你可能会有其他人不同意我的观点。

我会称它为值类型,而不是基本类型。没错,C#中的所有结构都是值类型。DateTime会是值类型吗?是的,因为它是
结构
@Alex,你可以简单地查找它。首先定义“基本类型”:定义基本类型和复杂类型。我想这才是真正的问题。你们将如何定义它?基本类型通常是这里列出的:…正确吗?MSDN称它们为“内置数据类型”。@AakashM这对这个项目来说并不是什么大问题。我只是好奇——你们这些家伙——一群狂暴的狗在想什么。好吧,我同意它不是原始的。所以如果你必须描述一个Guid,你会如何分类它的类型?我同意。C#规范明确定义了术语“原始”“如果每个人都重新发明自己的术语,把字符串称为值类型,因为它有值语义,那就太麻烦了。@亚历克斯·福特:那么为什么你需要区分原始类型和非原始类型呢?@SergeyTeplyakov我不需要。我只是好奇。我觉得好奇是一个错误。你引用的规范的第一部分令人困惑,我已经要求Mads在以后的版本中删除它。C语言规范根本不需要定义“基元类型”,不幸的是,这种语言最终出现在那里。所以,当杰森说这个问题的答案不明确时,他说得对。@Alex-是的。答案取决于上下文。@是否需要注释?编程语言C#不提供对
Guid
的内置支持(它是在.NET Framework中定义的,而不是在语言中定义的)。因此,您认为第二次定义它是一个基元类型的结论是不正确的。@Jason-谢谢您的更正。我读错了内置的。