Spesso vedo (in molte librerie di mocking ad esempio) metodi in cui un argomento di tipo generico viene utilizzato al posto di un argomento di tipo System.Type
. Sto specificatamente parlando di casi in cui il tipo generico viene utilizzato solo nell'operazione typeof(T)
(ad esempio, nessuna istanza di tipo T viene utilizzata da nessuna parte all'interno del metodo e T non viene utilizzata per il tipo restituito o altri argomenti).Utilizzo di un argomento di tipo generico al posto di un argomento di tipo System.Type. È un odore?
Ad esempio si consideri seguente metodo:
public string GetTypeName(System.Type type) { return type.FullName; }
questo metodo è spesso accompagnata con una versione generica:
public string GetTypeName<T>() { return GetTypeName(typeof(T)); }
Domande E 'una cattiva pratica o di una buona pratica?
È uno zucchero sintattico o ce ne sono altri?
Io vedo questo come un uso improprio di una caratteristica del linguaggio per abbreviare una chiamata a un metodo che accetta un argomento di tipo System.Type
Vuoi considerare questo un odore? Questo dovrebbe essere evitato? o è in realtà una buona pratica (per fornire un metodo generico come scorciatoia per evitare di digitare typeof()
).
Ecco alcune questioni pratiche con l'utilizzo di questo modello mi viene in mente:
- se si aggiunge un argomento di tipo non System.Type - metodo potrebbe bisogno di essere riscritto (se l'ordine degli argomenti è semanticamente significativo) alla versione non generica (altrimenti alcuni argomenti saranno argomenti di tipo generico, e alcuni saranno argomenti regolari).
- richiede due metodi (generici e non generici per i casi in cui il tipo non è noto in fase di compilazione). Di conseguenza aggiunge test unitari che sono per lo più privi di significato.
D'altra parte questa è una pratica comune (e la maggioranza ha sempre ragione, giusto?) Ma ancora più importante ReSharper preferisce che la firma quando faccio Estrarre Metodo refactoring su un codice che richiede solo argomento di tipo System.Type conosciuto al momento della compilazione (e ho imparato a prendere le loro raccomandazioni anche se non sulla fede, ma seriamente).
Un zen koan in fondo - Un argomento di tipo tipo un argomento di tipo? E questo mi infastidisce anche me. – SWeko
alla domanda è impossibile rispondere in modo definitivo. ciò che odora di uno può non sentire l'odore dell'altro. il fatto che il linguaggio supporti entrambi i casi significa che entrambe le forme sono implementazioni tecnicamente valide. – CedricB