下表列出了 C# 内置 值 类型:
下表列出了 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# 语言定义从数组类型和字符串类型到 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 - 从
string到System.ReadOnlySpan<char>
编译器永远不会忽略任何用户定义的转换,其中存在适用的 隐式范围转换 。 隐式范围转换可以应用于 扩展方法的第一个参数,即具有修饰符的参数 this 。 对于方法组转换,不考虑隐式范围转换。