【发布时间】:2012-10-17 08:34:58
【问题描述】:
我注意到不允许使用typeof(System.Void)。但是typeof(void) 是允许的。
当您使用typeof(System.String) 或typeof(string) 时,没有区别。
为什么会这样?
【问题讨论】:
我注意到不允许使用typeof(System.Void)。但是typeof(void) 是允许的。
当您使用typeof(System.String) 或typeof(string) 时,没有区别。
为什么会这样?
【问题讨论】:
这是因为 C# 定义了别名以保持原始 C 风格。
.NET 框架使用特定的命名约定:例如,它规定类名应以大写字母开头。因此,String——它不是 C# 原生类型,而是在 System 命名空间中定义的 .NET 类——实际上称为 System.String,或者简称为 String,如果你的文件中有一个 using System;文件。
C# 将 string 定义为 System.String 的别名,以便代码看起来像在 C 和其他基于 C 的语言(C++、Java...)中的样子。我认为它更具可读性。同样,int 与 System.Int32 相同。
【讨论】:
void 不像 string。在 C# 中使用 void 的几乎所有情况下,编译器都会对其进行特殊处理,例如在 void-"returning" 方法中不需要 return 语句,并且不允许 @987654326带有“值”类型为void 的表达式的@ 语句。 typeof(void) 是 void 真正被视为常规类型的少数情况之一。它是双向的:编译器可以假设任何不是void 的类型都不应该得到void 的特殊处理。允许以其他方式拼写 void 会使解释 C# 变得更加复杂,而且您没有理由需要它。
【讨论】:
string 是类System.String 的别名。
其他别名列表
感谢Jon Skeet。
【讨论】: