内置类型 (C# 参考)

下表列出了 C# 内置 类型:

C# 类型关键字 .NET 类型
bool System.Boolean
byte System.Byte
sbyte System.SByte
char System.Char
decimal System.Decimal
double System.Double
float System.Single
int System.Int32
uint System.UInt32
nint System.IntPtr
nuint System.UIntPtr
long System.Int64
ulong System.UInt64
short System.Int16
ushort System.UInt16

下表列出了 C# 内置 引用 类型:

C# 类型关键字 .NET 类型
object System.Object
string System.String
delegate System.Delegate
dynamic System.Object

在前面的表中,左侧列中的大多数 C# 类型关键字都是相应 .NET 类型的别名。 它们是可互换的。 例如,以下声明声明相同类型的变量:

int a = 123;
System.Int32 b = 123;

类型 dynamic 类似于 object. 主要差异在于:

  • 表达式上的 dynamic 作在运行时绑定,而不是在编译时绑定。
  • 不能使用 new dynamic()
  • 无法从 dynamic 类型派生类型。

关键字 delegate 是一个内置引用类型关键字,用于声明派生自 System.Delegate的类型。 与其他内置类型关键字不同, delegate 不是特定 .NET 类型的别名。 而是声明派生自抽象 System.Delegate 类型的自定义类型。 同样,表示运行时绑定行为, dynamic 而不是作为特定 .NET 类型的直接别名。

关键字 void 表示缺少类型。 将其用作不返回值的方法的返回类型。

C# 语言包括用于 System.Span<T>System.ReadOnlySpan<T> 类型的专用规则。 这些类型不归类为内置类型,因为没有与这些类型相对应的 C# 关键字。 C# 语言定义从数组类型和字符串类型到 <a0/> 的隐式转换。 这些转换将类型集成到 Span 更自然的编程方案中。 以下转换定义为 隐式跨度转换

  • 从具有元素类型 E 到 的任何单维数组 System.Span<E>
  • 从具有元素类型E的任何单维数组到System.ReadOnlySpan<U>E协变转换或标识转换到U
  • 从到System.Span<E>System.ReadOnlySpan<U>,当E具有协变转换或标识转换到U
  • 从到System.ReadOnlySpan<E>System.ReadOnlySpan<U>,当E具有协变转换或标识转换到U
  • stringSystem.ReadOnlySpan<char>

编译器永远不会忽略任何用户定义的转换,其中存在适用的 隐式范围转换 。 隐式范围转换可以应用于 扩展方法的第一个参数,即具有修饰符的参数 this 。 对于方法组转换,不考虑隐式范围转换。

另请参阅