In C #, con i metodi di estensione, puoi sostituire questa riga di codice:
TimeSpan interval = TimeSpan.FromMinutes(4);
con questo:
TimeSpan interval = 4.Minutes();
Il metodo di estensione è:
public static TimeSpan Minutes(this int minutes)
{
return TimeSpan.FromMinutes(minutes);
}
Il secondo esempio è interessante a causa del metodo di estensione sul letterale intero, che è valido, ma sembra strano (ancor più perché l'aggiunta di un punto dopo un letterale intero ha due significati diversi: diventare letterale doppio e accesso membro). Anche il secondo esempio si legge quasi come inglese (anche se il primo lo fa anche se in un modo diverso).
È una cattiva pratica usare le caratteristiche del linguaggio in modo tale da aumentare la brevità e la leggibilità, ma "abusare" della lingua? ( Preferisco le risposte che trattano PERCHÉ tu consideri una migliore dell'altra e non solo QUELLO CHE preferisci. )
Personalmente trovo il secondo modo più come il solito modo di pensare orientato agli oggetti in cui dichiari prima l'oggetto e poi accedi alla sua operazione membro per eseguire.
Analogamente a come facciamo con ToString
:
StringBuilder str = new StringBuilder();
// ... append something to the builder
String result = str.ToString();
e non lo facciamo
Strong result = String.From(str);
Naturalmente, si potrebbe sostenere che questo è semplicemente il modo in cui è stata progettata l'API / Framework.
Nota aggiuntiva:
Questo può anche essere esteso ad altri esempi di conseguimento della brevità:
String str = String.Format("{0} + {1} = {2}", op1, op2, op3);
modificato in:
String str = "{0} + {1} = {2}".FormatWith(op1, op2, op3);