Supponiamo che ci sia una classe con una proprietà virtuale (chiamiamola 'P'). È sovrascritto in una classe derivante. Ora voglio usare qualcosa del genere: obj.GetType().GetProperty("P")
per ottenere informazioni sulla proprietà prioritaria. Questa ricerca è ambigua, perché ci sono due proprietà "P" (base e override). Quindi ho digitato: obj.GetType().GetProperty("P", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance)
Riflettere classi derivate in C#
Restituisce solo la "P" prevalente, ma cosa succede se non riesco a indovinare in fase di compilazione se c'è un override a tutti? Quest'ultima chiamata restituirebbe null. Il caso è ancora più complicato, se la gerarchia dell'eredità è più grande.
In altre parole, voglio ottenere la sovrascrittura più "disponibile", altrimenti - la proprietà di base. Qual è il modo più pulito per raggiungere l'obiettivo? Solo uno che conosco al momento è di esaminare tutte le proprietà e controllare il nome e il tipo di dichiarazione.
Sì, questo è ciò di cui avevo bisogno per far funzionare le cose. L'esempio di utilizzo che hai fornito è esattamente come dovrebbe essere fatto. Grazie! – pbalaga