Introduzione
In questo post vedremo 
volutamente codice che considero sporco , ovvero che sconsiglierei 
di usare in un'applicazione reale. Non che non funzioni, ma non 
rappresenta sicuramente lo stato dell'arte e, come vedremo nel prossimo post, può essere 
sicuramente migliorato sotto molti aspetti. Lo scopo di questo post, riprendendo 
un po' il discorso cominciato l'altra volta, è quello innanzitutto di vedere un po' di 
codice C# che implementa la classe Shelf (scaffale, 
mensola) che utilizzeremo d'ora in poi in congiunzione con altre classi per 
approfondire tutte le tematiche dell'esame 70-536.
Senza perdere altro tempo, 
vediamo un po' di cosa si tratta!
La classe Shelf
Questa classe rappresenta banalmente un 
oggetto che ci permette di conservare un elenco di Book (libri). Niente 
di più, niente di meno. Un oggetto della classe Shelf 
ha una sola proprietà (definita con get/set) Name di 
tipo string che ci permette di identificare lo scaffale/mensola. Un field 
privato _Contens è accessibile attraverso un set di metodi implementati 
appositamente per poter aggiungere o prelevare un Book, per 
ottenere un duplicato dello Shelf, più altre proprietà che ci permettono di 
ottenere quanti Book ci sono nello Shelf. Ripeto: i nomi di proprietà e metodi 
sono volutamente inventati di sana pianta per poter poi toccare con mano i 
benefici nell'usare le interfacce standard di .NET.
class Shelf
{
    private Book[] _Contents;
    private string _Name;
    // Proprietà
    public string Name
    {
        get { return _Name; }
        set { _Name = value; }
    }
    // Costruttori
    public Shelf()
    {
        _Contents = new Book[0];
    }
    public Shelf(string Name, int HowManyElements)
    {
        _Name = Name;
        _Contents = new Book[HowManyElements];
    }
    public Shelf(string Name, Book[] BooksList)
    {
        _Name = Name;
        _Contents = BooksList;
    }
}
La classe Shelf dispone di 3 costruttori, che ci 
permettono di istanziare un'istanza così:
// Costruttore "vuoto"
public Shelf();
// Costruttore con Name e numero di Book
public Shelf(string Name, int HowManyElements);
// Costruttore con Name ed array di Book
public Shelf(string Name, Book[] BooksList);
 Fin qua, nulla di particolare. A questo 
punto la classe prevede i seguenti metodi:
public void Reset();
public void ResetContenuto();
public bool Put(int Position, Book WhichBook);
public bool Put(Book WhichBook);
public Book Get(int Position);
public Shelf Duplica();
public ArrayList GetContenuto();
public int QuantiBook;
Al di là dell'implementazione, che in questa fase 
possiamo trascurare, quello che voglio far notare è che la classe è 
assolutamente insensata. Se il codice è corretto, ovvio che funziona, però i 
nomi dei metodi e delle proprietà sono fuori 
standard, non implementa alcuna 
interfaccia e perciò perde di leggibilità, oltre che avere poche capacità di 
riutilizzo quando cercheremo, magari, di utilizzarla sfruttando le classi 
standard di .NET. Inoltre, provate a capire il significato di ciascun metodo, 
senza aver scritto alcun commento: il fatto di usare una nomenclatura fuori 
standard rende anche più ostico il suo utilizzo da parte di sviluppatori di 
terze parti che vogliono/devono utilizzare la vostra classe.
Ma non solo: la pecca più grande a mio avviso è che così facendo perdiamo la 
possibilità di usare la classe Shelf come parametro nella chiamata di metodi a 
classi .NET. Supponiamo ad esempio di voler ordinare i Book su un certo 
Shelf. Potremmo farlo in due modi: o scrivendo noi un metodo 
Sort, oppure sfruttando i meccanismo di sorting già offerti dal 
FX (che da oggi in poi userò come abbreviazione di .NET Framework). Il secondo 
metodo è sicuramente più efficace: per farlo dobbiamo fare in modo che in un 
modo o nell'altro la nostra classe supporti le interfacce IComparable e IComparer. Ed ancora: invece di usare un metodi inventato di sana 
pianta chiamata QuantiBook, implementiamo l'interfaccia ICollection e di conseguenza saremo costretti ad usare la ben nota 
proprietà Count. Gli vantaggi sono davvero moltissimi, in 
termini di pulizia di codice, performance, aderenza agli standard, riutilizzo 
del codice, etc. etc. Nel prossimo post vedremo qualche esempio pratico sulla 
classe Shelf    
      .