C++ 範本和 C# 泛型之間的區別(C# 編程指南)

來源:互聯網
上載者:User

C#泛型,關於C#泛型在msdn上有詳細的講解和案例。學習過程中要多研讀msdn上面的案例,因為它們是最精華,即使不是最容易理解的。

下面筆者摘錄了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# 不允許這樣;唯一允許的語言構造是那些可從約束推匯出來的構造。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.