|
From: Mark_google on 19 Jun 2008 18:02 I've tried using TypeDescriptor.GetProperties to get PropertyDescriptors and I've tried <t>.GetProperties to get PropertyInfo but I can't figure out how to determine for a given property whether or not the property in question is inherited from an ancestor or not. For that matter, I can't determine the inheritance heirarchy either (because that would be a workaround to see if my parent has the property defined). TIA,
From: Jeroen Mostert on 19 Jun 2008 19:53 Mark_google(a)nadigs.net wrote: > I've tried using TypeDescriptor.GetProperties to get > PropertyDescriptors and I've tried <t>.GetProperties to get > PropertyInfo but I can't figure out how to determine for a given > property whether or not the property in question is inherited from an > ancestor or not. > Checking if .DeclaringType is the same as .ReflectedType should do the trick. > For that matter, I can't determine the inheritance heirarchy either > (because that would be a workaround to see if my parent has the > property defined). > The inheritance hierarchy is actually an inheritance chain, since C# doesn't have multiple inheritance. (Interfaces are "implemented" rather than "inherited".) Simply following Type.BaseType will do. Involving interfaces as well makes things trickier because .DeclaringType will always show that a class declared the property, not an interface. You'll have to enumerate interfaces and mappings with .GetInterfaces() and ..GetInterfaceMap() for a full picture. -- J. http://symbolsprose.blogspot.com
From: digger on 20 Jun 2008 15:49 Thanks for the reply, > Checking if .DeclaringType is the same as .ReflectedType should do the trick. I tried that and it seemed to work in most cases - except for one case where I had a class ButtonControl that inherited an Infragistics button control and the declaringtype and relfectedtype were my buttoncontrol. I assumed it had to do w/ being in different assemblies? > The inheritance hierarchy is actually an inheritance chain, since C# doesn't > have multiple inheritance. (Interfaces are "implemented" rather than > "inherited".) Simply following Type.BaseType will do. Excellent. Thank you. > You'll have to enumerate interfaces and mappings with .GetInterfaces() and > .GetInterfaceMap() for a full picture. Thankfully, I can skip that part :)
From: digger on 20 Jun 2008 15:56 > I tried that and it seemed to work in most cases - except for one case > where I had a class ButtonControl that inherited an Infragistics > button control and the declaringtype and relfectedtype were my > buttoncontrol. I assumed it had to do w/ being in different > assemblies? Ah - this was because I wasn't actually inheriting the property, but overriding it... duh..
|
Pages: 1 Prev: Disappearing Data on Dynamically Loaded WPF Form Next: How To: do network sniffing on Vista? |