可能重复:
What is System.Void?
Why not System.Void?C#:为什么会出现空白和System.Void之间的差异
我注意到,它是不允许使用typeof(System.Void)
。但允许typeof(void)
。 当您使用typeof(System.String)
或typeof(string)
时,没有区别。
为什么会出现这种情况?
可能重复:
What is System.Void?
Why not System.Void?C#:为什么会出现空白和System.Void之间的差异
我注意到,它是不允许使用typeof(System.Void)
。但允许typeof(void)
。 当您使用typeof(System.String)
或typeof(string)
时,没有区别。
为什么会出现这种情况?
这是因为C#定义了保留原始C风格的别名。
.NET Framework使用特定的命名约定:例如它声明一个类名应该以Capital开头。因此,如果文件中有using System;
,则String
(不是C#本机类型,而是System
命名空间中定义的.NET类)实际上被称为System.String
或简称String
。
C#将string
定义为System.String
的别名,以便代码在C和其他基于C的语言(C++,Java,...)中看起来像它。我认为它更具可读性。以相同的方式,int
与System.Int32
相同。
string
是类别System.String
的别名。 System.Object的
其他列表。 SByte
感谢Jon Skeet为此。
void
是不是像string
。在C#中使用void
的几乎所有情况下,编译器都会对其进行特殊处理,例如在void
- “返回”方法中不要求return
语句,并且不允许return
语句的表达式带有“值“的类型void
。 typeof(void)
是void
实际上被视为常规类型的少数情况之一。它有两种方式:编译器可以假定任何非void
的类型都不应得到void
的特殊处理。允许使用其他方法来拼写void
会使C#更复杂,并且没有理由不需要它。
请参阅http://stackoverflow.com/a/6408995/44620 –