Io sono l'attuazione mia ArrayList a fini scolastici, ma per rendere le cose un po 'che sto cercando di utilizzare C# 4.0 Code Contracts. Tutto andava bene finché non avevo bisogno di aggiungere Contratti ai costruttori. Devo aggiungere Contract.Ensures() nel costruttore di parametri vuoto?Design by contratti e costruttori
public ArrayList(int capacity) {
Contract.Requires(capacity > 0);
Contract.Ensures(Size == capacity);
_array = new T[capacity];
}
public ArrayList() : this(32) {
Contract.Ensures(Size == 32);
}
Direi di sì, ogni metodo dovrebbe avere un contratto ben definito. D'altra parte, perché metterlo se si tratta solo di delegare il lavoro al costruttore "principale"? Logicamente, non avrei bisogno di farlo.
L'unico punto che vedo in cui sarebbe utile definire in modo esplicito il contratto in entrambi i costruttori è se in futuro abbiamo il supporto Intelisense per i contratti. Se ciò accadesse, sarebbe utile essere espliciti su quali contratti ha ciascun metodo, come quello che appare in Intelisense.
Inoltre, ci sono dei libri intorno che andare un po 'più a fondo sui principi e l'utilizzo di design by contract? Una cosa è avere la conoscenza della sintassi di come utilizzare i contratti in un linguaggio (C#, in questo caso), altro è sapere come e quando utilizzarlo. Ho letto diverse tutorial e Jon Skeet C# in profondità articolo su di esso, ma mi piacerebbe andare un po 'più in profondità, se possibile.
Grazie
correlati: http://stackoverflow.com/questions/2539497/code-contracts-do-we-have-to-specify-contract-requires-statements-redundant/2626997 – porges
Si potrebbe sbarazzarsi del "Contratto". Richiede (capacità> 0); " se fai il c'tor prendi un uint contro un int. Cerco di usare Contracts come ultima risorsa, in cui la lingua limita la tua capacità di far sapere al prossimo sviluppatore cosa stavi pensando quando hai creato il codice in primo luogo. Se si decide di mantenere il contratto, vorrei scrivere "Contract.Requires (capacità> = 0);" per uno dovrebbe sempre essere in grado di costruire una struttura di dati vuota e quindi avere la possibilità di aggiungere oggetti in un secondo momento. –
"... in futuro abbiamo il supporto Intelisense per i contratti." Il futuro è ora! http://visualstudiogallery.msdn.microsoft.com/1ec7db13-3363-46c9-851f-1ce455f66970 –