【问题标题】:Is a Guid a primitive type or a complex type? [closed]Guid 是原始类型还是复杂类型? [关闭]
【发布时间】:2011-11-20 12:16:56
【问题描述】:

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

更新

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

【问题讨论】:

  • 先定义“原始类型” :)
  • 定义原始类型和复杂类型。
  • 嗯,我想这是真正的问题。你们怎么定义它?
  • 原始类型通常是这里列出的那些:msdn.microsoft.com/en-us/library/ms228360%28v=vs.80%29.aspx ...对吗? MSDN 称它们为“内置数据类型”。
  • @AakashM 这对项目来说并不是什么大问题。我只是好奇——你们这些人——这群狂犬病是怎么想的。

标签: c# .net object types casting


【解决方案1】:

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

Wikipedia 列出了这两个定义:

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

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

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


更新:

这是Type 类的IsPrimitive 方法所说的:

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

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


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

【讨论】:

  • 有趣。所以当@Jason 说这个问题的答案很模糊时,他真的是对的。
  • @Alex - 是的。答案取决于上下文。
  • @Downvoter - 想发表评论吗?
  • 编程语言 C# 不提供对 Guid 的内置支持(它是在 .NET Framework 中定义的,而不是在语言中定义的)。因此,您认为根据第二个定义它是原始类型的结论是不正确的。
  • @Jason - 感谢您的更正。我读错了内置。
【解决方案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, @84 987654345@)、Double (double) 和 Single (single) 尤其忽略了 DateTimeGuid

我会完全失去描述符“原始”,而只是将 Guid 称为值类型。

【讨论】:

  • 好吧,我同意它不是原始的。所以如果你必须描述一个 Guid,你会如何分类它的类型?
  • 我同意。 C# 规范清楚地定义了术语“原始”,如果每个人都重新发明自己的术语并将字符串称为值类型,因为它具有值语义,那将是混乱的。
  • @Alex Ford:为什么需要区分原始类型和非原始类型?
  • @SergeyTeplyakov 我不知道。我只是好奇。我的印象是好奇是一种错误。
  • 您引用的规范的第一部分令人困惑,我已要求 Mads 在以后的版本中将其删除。 C# 语言规范没有必要定义“原始类型”,不幸的是这种语言最终出现在了那里。
【解决方案3】:

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

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

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

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

【讨论】:

  • 我将其称为值类型而不是原始类型。
  • 没错,C# 中的所有结构都是值类型。
  • DateTime 是值类型吗?
  • 是的,因为它是struct
  • @Alex 你可以随便查一下。
【解决方案4】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 2010-12-06
    • 2011-01-21
    • 2011-03-14
    • 1970-01-01
    • 2011-12-02
    • 2021-03-07
    • 2013-02-02
    相关资源
    最近更新 更多