2009-08-18 6 views
5

Dopo aver ottenuto con successo un elenco di tipi specifici da un assieme utilizzando la riflessione, ora desidero ottenere le proprietà pubbliche di ciascuno di essi.Quando si utilizza la riflessione per ottenere le proprietà, come posso limitare la ricerca solo alla sottoclasse a cui sono interessato?

Ciascuno di questi tipi deriva da almeno una classe base.

Ho notato quando ottengo proprietà su un tipo che ottengo anche proprietà dalle classi base.

Ho bisogno di un modo per filtrare le proprietà della classe base e recuperare solo le proprietà per il tipo che sto chiamando ottenere proprietà su.

Suppongo che sarebbe simile a come ottengo solo sottoclassi di un tipo di base, escluso il tipo di base, da un determinato tipo di base.

Assembly.GetAssembly(baseType).GetTypes().Where(type => type.IsSubclassOf(baseType)).ToList() 

risposta

11

Uso BindingFlags.DeclaredOnly nella chiamata a Type.GetProperties:

var properties = Type.GetProperties(BindingFlags.DeclaredOnly | 
            BindingFlags.Public | 
            BindingFlags.Instance); 
+0

@ towps- vedere qui per saperne di più su di esso: http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx – RichardOD

+0

@Richard: aggiungerà il collegamento ... –

+0

Grazie gente! Non ero sicuro del motivo per cui il solo apporre la bandiera DeclaredOnly non mi dava niente. Sembra necessario pubblico e istanza? DeclareOnly e Public non mi hanno ancora capito niente. – topwik

2

utilizzare la bandiera vincolante BindingFlags.DeclaredOnly nel metodo GetProperties