Non è esattamente un Daily Issue.. ma ieri, per il progetto di cui parlavo tempo fa, mi sono ritrovato ad entrare nell'annosa questione del parametro Type dei famosi metodi dell'oggetto ClientScriptManager per iniettare codice JavaScript all'interno di una pagina, ed in particolare RegisterClientScriptBlock e RegisterStartupScript.
In questi due metodi, sono sempre stato abituato dagli esempi a mettere come tipo this.GetType(). Questo sia che lo mettessi in una pagina direttamente, che in un custom control.
Il dubbio mi è venuto ieri, quando ho sviluppato un CustomControl derivato da un mio CustomControl, ed ho notato che... lo script veniva duplicato!
Dopo qualche ricerca in giro, ho trovato conferma dei miei dubbi: l'utilità del tipo è evitare che per tipi simili venga ricreato lo stesso snippet piu volte, così se io incorporo dieci controlli tutti uguali non duplico dieci volte il JavaScript. Se però io ho un oggetto mioControllo, e ne sviluppo un altro che aggiunge poche cose, ma usa le funzionalità di base di mioControllo, e lo chiamo mioControlloDerivato, con il GetType() mi ritrovo due script se li uso entrambi, uno per mioControllo ed uno per mioControlloDerivato, in quanto GetType da due risultati differenti.
Se per me questa cosa va bene, nel senso che è voluta, ok, altrimenti sono costretto ad utilizzare typeof(mioControllo)... in questo modo anche mioControlloDerivato avrà sempre come tipo mioControllo (che è anche corretto in quanto deriva da esso) ed eviteremo inutili duplicazioni!