Get private Properties/Method of base-class with reflection
With Type.GetProperties()
you can retrieve all properties of your current class and the public
properties of the base-class. Is it somehow possible to get the private
properties of the base-class too?
class Base
{
private string Foo { get; set; }
}
class Sub : Base
{
private string Bar { get; set; }
}
Sub s = new Sub();
PropertyInfo[] pinfos = s.GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Public |开发者_如何学Python BindingFlags.Instance | BindingFlags.Static);
foreach (PropertyInfo p in pinfos)
{
Console.WriteLine(p.Name);
}
Console.ReadKey();
This will only print "Bar" because "Foo" is in the base-class and private.
To get all properties (public/private/protected/internal/static/instance) of a given Type someType
, you must access the base class by using someType.BaseType
.
Example:
PropertyInfo[] props = someType.BaseType.GetProperties(
BindingFlags.NonPublic | BindingFlags.Public
| BindingFlags.Instance | BindingFlags.Static)
Iterate through the base types (type = type.BaseType), until type.BaseType is null.
MethodInfo mI = null;
Type baseType = someObject.GetType();
while (mI == null)
{
mI = baseType.GetMethod("SomePrivateMethod", BindingFlags.NonPublic | BindingFlags.Instance);
baseType = baseType.BaseType;
if (baseType == null) break;
}
mI.Invoke(someObject, new object[] {});
精彩评论