下表列出了 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<T> 和 ReadOnlySpan<T>的隱含轉換。 這些轉換會將 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>
編譯程式絕不會忽略任何使用者定義的轉換,其中適用的 隱含範圍轉換 存在。 隱含的張距轉換可套用於 擴展成員的接收參數。 接收參數由 extension 擴充成員中的關鍵字指定。 接收參數是使用 this 修飾符的擴展方法的第一個參數。 方法群組轉換不會考慮隱含範圍轉換。