首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使void不是原始类型的设计原理是什么?

使void不是原始类型的设计原理是什么?
EN

Stack Overflow用户
提问于 2017-03-17 09:46:50
回答 3查看 2.9K关注 0票数 32

当在void类型上使用反射void时,会从C++背景返回false.Coming,这是令人惊讶的。

查看C# 6.0规范 (第82页)没有提到void类型,这可能意味着它没有被完全归类为一个类型。

语言规范中有什么东西可以将void归类为其他东西吗?或者其他提到背后原因的讨论之类的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-17 10:11:00

为什么void不是一个原始类型?因为你不能实例化它。它不是原始类型,也不是引用类型。这根本不是什么。

Eric描述了这篇关于软件工程的文章中的void类型的一些“问题”,它深入到了void作为一种类型在委托和Action中使用的细节:

类型系统本质上是一个系统,用于对特定值的哪些操作进行逻辑推导;无效返回方法不返回值,因此,“什么操作对此有效?”一点道理都没有。没有“事物”,有一个操作,有效的或无效的。

让它成为一个原始类型,违背了void在VES (虚拟执行系统)中的特殊意义和目的,正如Eric稍后解释的:

调用void方法的效果与调用非空方法的效果有根本的不同;非空方法总是在堆栈上放置一些可能需要弹出的内容。空方法从不将某物放入堆栈中。

使void成为一个基本类型打破了这一规则,尽管您可以争论它是否有用,正如Eric在引用的文章中进一步解释的那样。

票数 47
EN

Stack Overflow用户

发布于 2017-03-17 11:33:27

void不是一个类型,它是一个关键字。就像在C++中一样,意味着完全相同的东西。关键词在语言中扮演着很重要的角色,它们只能出现在特定的地方,解析器可以对程序员的意图做出艰难的假设。

主要作用是生成良好的错误消息。在声明无效的方法中,像return 42;这样的语句很明显,您会得到一条非常清晰的“嘿,您说它不会返回任何东西”的错误消息。不太明显的是,它们对于从基本语法错误中恢复非常有用,例如,缺少的}结束大括号是一个很难恢复的错误。当解析器在解析方法主体时遇到void时,它可以重置解析器状态并再次生成良好的错误消息。

System.Void类型存在是一个与元数据相关的怪癖。大致相当于C++中的一个C++文件。它们主要用于处理C++中的技术限制,它没有模块的概念,它使用一次编译模型,并要求声明总是出现在定义之前。在C++中非常痛苦的工作,尽管编辑器工具可以帮助一点。在C#中没有这样的限制,编译器将从定义中生成声明。

元数据详细描述了一种方法,存储在元数据中的MethodDef和MethodDefSig记录中。CLR设计者可以表达“此方法不返回数据”的两种基本方式。一个显而易见的方法是,他们可以在MethodAttributes enum中使用一些东西,比如"HasNoReturnValue“。但是,由于许多方法都有一个非空返回类型,而且它的空间无论如何都保留在MethodDefSig记录中,所以他们只是选择了一个前哨值作为返回类型。System.Void。

反思System.Void类型通常并不有用。实际上,他们可以为IsPrimitive选择任何价值,这也不会产生任何影响。错误是一种合乎逻辑的选择,它并不描述一种类型。

票数 12
EN

Stack Overflow用户

发布于 2017-03-17 10:03:34

在阅读C#规范时,没有提到void类型。它被写成一个return type。在目录中,它不是按引用类型或值类型分类的。它是作为关键字提到的。

关于typeof函数的部分说:

第三种类型表达式由一个The of关键字和一个带括号的void关键字组成。此窗体表达式的结果是表示缺少类型的System.Type对象。type for (Void)返回的类型对象与为任何类型返回的类型对象不同。这个特殊类型的对象在类库中很有用,这些类库允许对语言中的方法进行反射,在这些方法中,这些方法希望有一种方法来用System.Type实例来表示任何方法的返回类型,包括void。

对我来说,这表明void有一个关联的类型,但是只在您希望反射因为类型系统而给出一些有形的东西的情况下才使用。否则,void只是一个关键字。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42854117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档