public abstract class BaseClass
{
public string Prop1
{
get;
set;
}
private int BaseProp1
{
get;
set;
}
private int baseField1 = 0;
private static int basePrivateField1 = 0;
private int BasePrivateCall1(int p)
{
Prop1 = p.ToString();
return p;
}
public static int BaseStaticPublicCall1(int p)
{
return p;
}
private static int BasePrivateStaticMethod1(int p)
{
basePrivateField1 = p;
return p;
}
}
public class InherentClass:BaseClass
{
public string Prop2
{
get;
set;
}
private int Prop3
{
get;
set;
}
public void Call1()
{
}
}
/// <summary>
///A test for Call1
///</summary>
[TestMethod()]
public void Call1Test()
{
InherentClass target = new InherentClass();
target.Call1();
PropertyInfo pi = target.GetType().GetProperty("Prop3", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.SetProperty);
pi.SetValue(target, 1, null);
BaseClass baseC = target as BaseClass;
//access private property by using refrection.
PropertyInfo basepi = typeof(BaseClass).GetProperty("BaseProp1",
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.SetProperty);
basepi.SetValue(baseC, 2, null);
// access private static method.
MethodInfo BasePrivateStaticMethod1MI = typeof(BaseClass).GetMethod("BasePrivateStaticMethod1",
BindingFlags.Instance | BindingFlags.NonPublic|BindingFlags.Static);
object BasePrivateStaticMethod1MIre = BasePrivateStaticMethod1MI.Invoke(baseC, new object[] { 220 });
// access private static field.
FieldInfo basePrivateField1FI = typeof(BaseClass).GetField("basePrivateField1",
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static);
basePrivateField1FI.SetValue(baseC, 1);
// private instance field.
FieldInfo baseField1pi = typeof(BaseClass).GetField("baseField1",
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.SetField);
baseField1pi.SetValue(baseC, 1);
// private instance method.
MethodInfo baseMethod1pi = typeof(BaseClass).GetMethod("BasePrivateCall1",
BindingFlags.Instance | BindingFlags.NonPublic);
object re = baseMethod1pi.Invoke(baseC, new object[] { 30 });
Type t=typeof(BaseClass);
// invoke private static method
object re3 = t.InvokeMember("BaseStaticPublicCall1",
BindingFlags.InvokeMethod,
null,
t, new object[] { 5 });
}
浙公网安备 33010602011771号