簡體   English   中英

我需要一個解決方案來進行類型參數重載

[英]i need a solution to do type parameter overloading

我需要這樣的類型參數重載:

Public Class Map(Of TKey, TValue)

Public Class Map(Of TKey As IEquatable(Of TKey), TValue)

這樣我就可以New Map(Of Human) ,並且編譯器會自動將其與Public Class Map(Of TKey, TValue)匹配;如果我new Map(Of String)則編譯器會自動將其與Public Class Map(Of TKey As IEquatable(Of TKey), TValue) (因為String是IEquatable(Of String))

現在,我的解決方案是為類提供不同的名稱,例如:

Public Class Map(Of TKey, TValue)

Public Class EqMap(Of TKey As IEquatable(Of TKey), TValue)

但我正在尋找更好的解決方案

抱歉,我不會說VB ...但是在C#中(您的標簽中有),您想要的是

Map<TKey,TValue>
{
    // implementation
}

Map<Tkey,TValue>
   where TKey: IEquatable
{

}

不幸的是,不支持此方法,因為約束不是簽名的一部分,您將必須提供不同的簽名,並且使用不同的名稱(或可能使用名稱空間)是IMO的最簡潔解決方案。

沒有比您建議的更好的解決方案。 我個人更喜歡EquatableMapEqMap ,如果is關系和重用是有益的,則EquatableMap可以繼承Map

.Net不支持類重載,誰知道呢,也許在.Net 5.0中。 這將是有用的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM