C#:为什么void和System.Void之间存在差异

时间:2012-10-17 08:34:59

标签: c# void

  

可能重复:
  What is System.Void?
  Why not System.Void?

我注意到不允许使用typeof(System.Void)。但typeof(void)是允许的。 当您使用typeof(System.String)typeof(string)时,没有区别。

为什么会这样?

3 个答案:

答案 0 :(得分:2)

这是因为C#定义了别名以保持原始的C风格。

.NET Framework使用特定的命名约定:例如,它声明类名应以Capital开头。因此,String - 不是C#本机类型,而是System命名空间中定义的.NET类 - 实际上称为System.String,或String。您的文件中有using System;

C#将string定义为System.String的别名,以便代码看起来像C和其他基于C的语言(C ++,Java,...)。我认为它更具可读性。以同样的方式,intSystem.Int32相同。

答案 1 :(得分:1)

voidstring不同。在C#中使用void的几乎所有情况下,编译器都会对其进行特殊处理,例如在return - “返回”方法中不需要void语句,并且不允许return语句的表达式为“{”,类型为voidtypeof(void)是少数void被视为常规类型的案例之一。它有两种作用:编译器可以假设任何不是void的类型都不应该得到void的特殊处理。允许其他方法拼写void会使解释C#变得更复杂,并且没有理由为什么你需要它。

答案 2 :(得分:0)

string是类System.String的别名。

其他别名列表

  • object:System.Object
  • string:System.String
  • bool:System.Boolean
  • byte:System.Byte
  • sbyte:System.SByte
  • 短:System.Int16
  • ushort:System.UInt16
  • int:System.Int32
  • uint:System.UInt32
  • long:System.Int64
  • ulong:System.UInt64
  • float:System.Single
  • double:System.Double
  • decimal:System.Decimal
  • char:System.Char

感谢Jon Skeet