共用方式為


C++範本與 C# 泛型之間的差異 (C# 程式設計手冊)

C# 泛型和C++範本都是支持參數化型別的語言功能。 不過,這兩者之間有許多差異。 在語法層級,C# 泛型是參數化類型的更簡單方法,不需要C++範本的複雜度。 此外,C# 不會嘗試提供C++範本提供的所有功能。 在實作層級,主要差異在於 C# 泛型型別替代是在運行時間執行,因此會保留具現化物件的泛型型別資訊。 如需詳細資訊,請參閱 運行時間中的泛型

以下是 C# 泛型與C++範本之間的主要差異:

  • C# 泛型不提供與C++範本相同的彈性。 例如,無法在 C# 泛型類別中呼叫算術運算符,雖然可以呼叫使用者定義的運算符。

  • C# 不允許非類型範本參數, 例如 template C<int i> {}

  • C# 不支持明確特製化;也就是說,特定類型的範本自定義實作。

  • C# 不支援部分專門化:為類型參數的部分內容提供自定義實作。

  • C# 不允許使用型別參數做為泛型型別的基類。

  • C# 不允許類型參數具有預設類型。

  • 在 C# 中,泛型型別參數本身不能是泛型,雖然建構型別可以當做泛型使用。 C++允許範本參數。

  • C++允許程式碼可能對範本中的所有類型參數都不適用,但會在使用特定類型作為類型參數時進行檢查。 C# 要求在類別中撰寫的程式碼必須能夠適應任何符合條件約束的類型。 例如,在 C++ 中,您可以撰寫一個函式,該函式使用算術運算子 +- 在類型參數的物件上。在範本具現化時,如果使用不支持這些運算符的類型,將會產生錯誤。 C# 不允許此專案;唯一允許的語言建構是可從條件約束推斷的語言建構。

另請參閱