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 });
       }

posted on 2010-08-16 11:27  netfuns  阅读(189)  评论(0)    收藏  举报