Perché ImmutableDictionaryTKey, TValue implementa IDictionaryTKey, TValue?

0

Sembra una scelta di design strana, perché un Dictionary e un ImmutableDictionary sono molto diversi dal punto di vista della scrittura. (In termini di lettura, entrambi implementano IReadOnlyDictionary , che va bene *)

In effetti, l'attuale implementazione di IDictionary<TKey, TValue>.Add() nella classe ImmutableDictionary genera un NotSupportedException (vedi qui ).

Quindi, qual era il punto nel fare questo? Se un metodo restituisce un IDictionary che è in effetti un ImmutableDictionary , avrai alcuni problemi durante l'aggiunta di elementi, ad esempio.

* tranne per il nome dell'interfaccia, che è oggetto di dibattito

    
posta Vincent Ripoll 10.06.2016 - 18:03
fonte

1 risposta

2

Per i motivi, prendi una lettura delle "Interoperating con le raccolte esistenti "parte di questo post sul blog di MS .

Gli sviluppatori di questi tipi immutabili hanno avuto una scelta, che esprimerò qui in un modo sintetico, ma alquanto caricato:

  1. Rendili facili da usare
  2. fallo correttamente

Inizialmente, sono andati lungo il percorso "fallo correttamente". L'interfaccia IList<T> è un classico esempio di come interrompere il principio di sostituzione di Liskov poiché incoraggia positivamente la creazione di tipi che non sono sostituibili l'uno con l'altro (senza controllare lo stato dei flag per determinare quale particolare stile di implementazione si sta gestendo). Tuttavia, questo significava che non interagivano bene con il codice esistente, né potevano essere utili con interfacce come IList<T> . Così hanno preso la decisione di favorire l'utilità rispetto alla purezza. Rimane una decisione controversa, ma probabilmente è stata la scelta corretta, pragmatica, da prendere.

    
risposta data 10.06.2016 - 19:24
fonte

Leggi altre domande sui tag