Есть ли эквивалент для Java класса WeakHashMap в C#?
Есть ли класс C#, который предоставляет карту со слабыми ключами и / или слабыми значениями? Или, по крайней мере, WeakHashMap, как функциональность.
3 ответа
В.Net 3.5 и ниже такой структуры нет. Однако я написал один для стороннего проекта и разместил код в следующем месте.
Начиная с.NET 4.0, доступна структура под названием ConditionalWeakTable
в пространстве имен Runtime.CompilerServices, который также делает свое дело.
До.NET 4 CLR не предоставляла функциональные возможности, необходимые для реализации карты этой формы. В частности, Java обеспечивает ReferenceQueue<T>
класс, который WeakHashMap
использует для управления слабыми ключами на карте. Поскольку в.NET нет эквивалента этому классу, нет чистого способа создать эквивалент Dictionary
,
В.NET 4 появился новый класс ConditionalWeakTable<TKey, TValue>
был добавлен как часть усилий по улучшению способности CLR поддерживать динамические языки. Этот класс использует новый тип дескриптора сборки мусора, который реализован в самом CLR и представлен в mscorlib.dll через внутренний DependentHandle
состав.
Это означает следующее для вас:
- Там нет эквивалента
WeakHashMap
до.NET 4. - Начиная с.NET 4 и, по крайней мере, до.NET 4.5.1, единственный способ поддерживать функциональность
WeakHashMap
это использоватьConditionalWeakTable
класс (который запечатан).
Дополнительная информация находится в следующем посте:
Можно ли создать по-настоящему слабый словарь в C#?
Ближайший эквивалент платформы, вероятно, Dictionary<K, WeakReference<V>>
, То есть это обычный словарь, но со значениями, являющимися слабыми ссылками.