下表列出了 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
。 对于方法组转换,不考虑隐式范围转换。