views:

161

answers:

2

After successfully getting a list of specific types out of an assembly using reflection, I now want to get at the public properties of each of those.

Each of these types derives from at least one base class.

I notice when I get properties on a type that I get properties from the base classes as well.

I need a way to filter out base class properties and only get back the properties for the type that I am calling get properties on.

I reckon it would be similar to how I'm only getting sub classes of a base type, excluding the base type, from a given base type.

Assembly.GetAssembly(baseType).GetTypes().Where(type => type.IsSubclassOf(baseType)).ToList()
+3  A: 

Use BindingFlags.DeclaredOnly in your call to Type.GetProperties:

var properties = Type.GetProperties(BindingFlags.DeclaredOnly | 
                                    BindingFlags.Public |
                                    BindingFlags.Instance);
Jon Skeet
@towps- see here to read more about it: http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx
RichardOD
@Richard: will add link...
Jon Skeet
Thanks folks! I wasn't sure why only attaching the DeclaredOnly flag wasn't getting me anything. Seems you require public and instance? DeclareOnly and Public still didn't get me anything.
towps
Yes, you've got to specify Public or NonPublic, and Static or Instance (or combinations).
Jon Skeet
+1  A: 

use the binding flag BindingFlags.DeclaredOnly in the GetProperties method

Gregoire