Call private method from abstract class
27/09/2012 21:44
Using System.Linq;
public object InvokePrivate<T> (T instance, string methodName, params object[] obj)
{
var baseType = instance.GetType().BaseType;
var types = GetTypes(obj);
var method = baseType.GetMethod(methodName,
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.NonPublic, null, types, null);
return method.Invoke(instance, obj);
}
internal Type[] GetTypes(object[] obj)
{
IList<Type> list = new List<Type>();
foreach (var item in obj)
{
list.Add(item.GetType());
}
return list.ToArray<Type>();
}
//Call in test-ProjectNameWebPartBase is abstract class, "GetAllValidators" is private method
ProjectNameWebPartBase target = new MultipageFormWebPart();
List<Control> actual = (List<Control>)InvokePrivate<ProjectNameWebPartBase>(target, "GetAllValidators", controls);