Guid 是原始类型还是复杂类型? [已关闭]

问题描述 投票:0回答:4

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

更新

查看答案后,我非常感谢我能够从一些答案中收集到的澄清。然而,我的印象是好奇心害死猫害死了猫,所以我投票结束我自己的问题。

c# .net object types casting
4个回答
5
投票

这取决于您所说的“原始数据类型”。

维基百科列出了这两个定义:

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

根据第一个,

Guid
是构造类型,不是原语。

根据第二个,它也不是原始类型(因为它是在 BCL 中的

System
命名空间中提供的,并且不是由任何 .NET 语言定义的)。


更新:

这就是 IsPrimitive

 类的 
Type
 方法所说的:

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

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


结论:根据上述三个单独的标准,

Guid
绝对不是原始类型。


2
投票

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

语言规范指出:

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

这似乎暗示

Guid
是一种“原始”类型。然而
Type
提供了
IsPrimitive
属性,并且
typeof(Guid).IsPrimitive
将返回
false

但请注意,

Guid
不是由语言提供的,而是由 .NET Framework 提供的。

语言规范还规定,C# 中的基本类型为

Boolean
(
bool
)、
Byte
(
byte
)、
SByte
(
sbyte
)、
Int16
(
short
)、
 UInt16
Int32
(
int
)、UInt32 (
uint
)、
Int64
(
long
)、UInt64 (
ulong
)、
IntPtr
UIntPtr
Char
(
) char
)、
Double
(
double
) 和
Single
(
single
) 值得注意的是,省略了
DateTime
Guid

我会完全丢失描述符“原始”,而只将

Guid
称为值类型。


2
投票
根据您的定义,Guid 将是一个原语。它是一个类似

int

DateTime
 的结构。它也由 .NET Framework 在 
System
 命名空间中提供。另外,它是不可变的,就像 
string
DateTime

根据 .NET 的定义,事实并非如此。

请参阅

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

我会把它归为int

DateTime
string
同一类别。


0
投票
这取决于你所说的“原始类型”。

Type Fundamentals文章中说:“编译器直接支持的任何数据类型都称为原始类型。”。我不希望编译器“知道”System.Guid

文章

C# 中的原始数据类型 并未将 System.Guid

 列为原始类型。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.