反射怎样调用另外一个类的私有成员

 一个类的私有成员,本来是不可以给外部调用的。但是在某些特殊情况下,

我们可能确实须要调用另一个类的私有成员,怎么办呢? 看下面的一个例子就明白了。

要注意的是:尽量不要这么调有,因为,也许版本升级以后,别人就不再提供这个方法了。

 

namespace 反射调用私有的成员

{

    class Program

    {

        static void Main(string[] args)

        {

            Type type = typeof(Class1);

            object obj= Activator.CreateInstance(type);

 

            //调用类库中公有的方法用下面的方法就可以了,但是私有方法就不行了。

            MethodInfo mi= type.GetMethod("heihei");

            mi.Invoke(obj, null);

 

            //调用私有的方法只要加上两个参数就可以了

            MethodInfo mi2 = type.GetMethod("haha", BindingFlags.NonPublic| BindingFlags.Instance);

            mi2.Invoke(obj,null);

 

            Console.Read();

        }

    }

 

public class Class1

    {

        public void heihei()

        {

            Console.WriteLine("say heihei");

        }

 

        private void haha()

        {

            Console.WriteLine("say haha");

        }

 

        public static void hello()

        {

            Console.WriteLine("say hello");

        }

}

}

 

posted @ 2012-04-06 22:42  伯箫  阅读(293)  评论(0编辑  收藏  举报