为什么不选择System.Void
本文关键字:Void System 选择 为什么不 | 更新日期: 2023-09-27 17:59:29
可能重复:
什么是System.Void?
我没有实际的理由知道这个答案,但我还是很好奇。。。
在C#中,尝试使用System.Void
会产生编译错误:
错误CS0673:不能从C#使用System.Void--使用typeof(Void)获取Void类型对象
据我所知,void
只是System.Void
的一个别名。所以,我不明白为什么"System.Void"不能像"System.string"中的"string"那样直接使用。我很想读一篇对此的解释!
顺便说一句,System.Void
可以成功地与Mono编译器一起使用,而不是微软的,在那里它看起来相当于使用void
关键字。因此,这一定是编译器强制的限制,而不是CLR限制,对吧?
我认为这个结构的唯一目的是在反射中使用它,而其他类型(如System.String
、System.Int32
等)是保存数据的适当类型。System.Void
不携带任何数据,并且不能从代码中实例化此结构。
我对编译器错误的猜测是,它是为了增强代码的一致性。有这样的方法看起来会很奇怪:
System.Void MyMethod() { ... }
乍一看,它似乎在返回一些东西,而实际上并没有。在我看来,这是C#团队的一个好决定(如果我的猜测是正确的)
也许是因为如果允许System.Void作为类型引用,它可能会开始出现在中
- 函数声明(返回类型)——这显然是合法的
- 参数声明
- 模板参数声明
- 变量声明
使用typeof(void)
在语法上是非法的。这遵循最小惊奇的原则
编辑此外,正如Eric Lippert所指出的,这是因为,例如,Void不是任何事物的超类(事实上,Void是不变量)。在此处阅读全部内容https://learn.microsoft.com/en-us/archive/blogs/ericlippert/the-void-is-invariant