In Java, sono abituato a dichiarare le collezioni utilizzando l'interfaccia più astratta possibile e quindi a costruirle utilizzando l'implementazione concreta che ha senso al momento. Di solito è simile a questo:
public class MyStuff {
private Map<String, Address> customerAddresses;
private List<ToDoItem> tasks;
private Set<Person> people;
public MyStuff() {
customerAddresses = new HashMap<String, Address>();
tasks = new ArrayList<ToDoItem>();
people = new HashSet<Person>();
}
}
Questo mi consente una maggiore flessibilità nel modificare l'implementazione di una raccolta in un secondo momento, quando tutto ciò che realmente dipendo è l'interfaccia di alto livello (cioè ho bisogno di qualcosa per memorizzare coppie chiave-valore, o qualcosa per memorizzare i dati ordinati) ed è generalmente considerata una "best practice" standard in Java.
Sto solo iniziando a programmare in C #, però, e non sono sicuro se esiste una pratica equivalente per la gerarchia delle collezioni di C #. Le raccolte in C # differiscono dalle raccolte in Java in diversi modi: Collection
è un tipo concreto, l'interfaccia ICollection
espone metodi simili a Set
di Java mentre l'interfaccia ISet
specifica molte più funzionalità e il set di chiavi o il set di valori di Dictionary
non è un ISet
, per nominarne alcuni. Ha senso fare qualcosa di simile in C #?
public class MyStuff {
private IDictionary<String, Address> customerAddresses;
private IList<ToDoItem> tasks;
private ISet<Person> people;
public MyStuff() {
customerAddresses = new Dictionary<String, Address>();
tasks = new List<ToDoItem>();
people = new HashSet<Person>();
}
}
O ci sono diverse interfacce e implementazioni "standard" da utilizzare per tali raccolte? Dovrei utilizzare ICollection
e Collection
al posto di Set
o List
? Sono tentato di utilizzare le classi e le interfacce C # che "sembrano più vicine" a quelle Java a cui sono abituato, ma preferirei utilizzare l'impostazione che si adatta meglio ai paradigmi e agli standard C #.