2009-09-03 11 views
18

Sto risolvendo un problema relativo alla gestione di un evento del mouse in una classe base. Poiché i punti di interruzione non funzionano correttamente per la risoluzione degli eventi del mouse, desidero aggiungere alcuni output di debug nel gestore eventi. Tuttavia, per me è importante includere il nome della classe derivata effettiva nelle informazioni di debug poiché il codice di gestione degli eventi nella classe base è condiviso da un gran numero di classi derivate e solo alcune mostrano il problema.C# Ottieni il nome del tipo derivato dall'interno della classe di base

Ho provato a utilizzare this.GetType().Name ma questo semplicemente restituisce il tipo della classe base. Ovviamente, posso iniziare a modificare le classi e, ad esempio, passare la classe derivata type al costruttore della classe base in cui può memorizzarla, ma si tratta di molte modifiche per quello che è ovviamente solo un bisogno temporaneo. C'è un modo semplice per ottenere il tipo di classe derivata dalla classe base?

risposta

31

this.GetType().Name dovrebbe funzionare. Non puoi avere una classe derivata.

8

this.GetType().Name ritornano sempre il nome del tipo di esecuzione corrente, non il tipo che il codice che è stato scritto in è possibile emulare i punti di interruzione, però, utilizzando Debugger.Break() in modo condizionale:.

if (this.GetType().Name == "Problematic type") 
    System.Diagnostics.Debugger.Break(); 
1

Quando alzando un Evento, assicurati di passare il vero mittente alla proprietà del mittente. L'oggetto mittente nella classe di ascolto dovrebbe puntare correttamente alla classe figlio che ha generato l'evento.

Problemi correlati