可能重复:
What is System.Void?
我没有实际理由知道这个答案,但无论如何我很好奇......
在C#中,尝试使用System.Void
会产生编译错误:
错误CS0673:System.Void无法在C#中使用 - 使用typeof(void)获取void类型对象
据我了解,void
只是System.Void
的别名。所以,我不明白为什么'System.Void'不能直接使用,例如'System.String'的'string'。我很乐意为此阅读解释!
顺便说一句,System.Void
可以成功地与Mono编译器一起使用,而不是微软的编译器,它看起来等同于使用void
关键字。因此,这必须是编译器强制执行的限制而不是CLR限制,对吗?
答案 0 :(得分:18)
我认为这个结构的唯一目的是在反射中使用它,而其他类型(如System.String,System.Int32等)是保存数据的正确类型。 Void不携带任何数据,您无法从代码中实例化此结构。
我对编译器错误的猜测是它在那里强制执行代码的一致性。拥有这样的方法看起来很奇怪:
System.Void MyMethod() { ... }
乍一看,它似乎正在回归,而实际上却没有。在我看来,这是C#团队的一个很好的决定(如果我对它的推测是正确的)
答案 1 :(得分:6)
也许是因为如果允许System.Void作为类型引用,它可能会开始出现在
中使用typeof(void)
会使语法非法。这遵循最少意外的原则
编辑此外,正如Eric Lippert指出的那样,这是因为,例如Void不是任何东西的超类(事实上,void是不变的)。在此处阅读所有相关内容http://blogs.msdn.com/b/ericlippert/archive/2009/06/29/the-void-is-invariant.aspx