天天看点

C#反射简单例子

参考了 http://www.cnblogs.com/sosoft/p/3506015.html

    class Program

    {

        [STAThread]

        static void Main(string[] args)

        {

            System.Console.WriteLine("列出程序集中的所有类型");

            Assembly a = Assembly.LoadFrom("ReflectionExample.exe");

            Type[] mytypes = a.GetTypes();

            foreach (Type t in mytypes)

            {

                System.Console.WriteLine(t.Name);

            }

            System.Console.ReadLine();

            System.Console.WriteLine("列出HelloWorld中的所有方法");

            Type ht = typeof(HelloWorld);

            MethodInfo[] mif = ht.GetMethods();

            foreach (MethodInfo mf in mif)

            {

                System.Console.WriteLine(mf.Name);

            }

            System.Console.ReadLine();

            System.Console.WriteLine("实例化HelloWorld,并调用SayHello方法");

            Object obj = Activator.CreateInstance(ht);

            string[] s = { "ZhenLei" };

            Object objName = Activator.CreateInstance(ht, s);

            //BindingFlags flags = (BindingFlags.NonPublic | BindingFlags.Public | 

            // BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);

            MethodInfo msayhello = ht.GetMethod("SayHello");

            msayhello.Invoke(obj, null);

            msayhello.Invoke(objName, null);

            System.Console.ReadLine();

        }

    }

    class HelloWorld

    {

        string myName = null;

        public HelloWorld(string name)

        {

            myName = name;

        }

        public HelloWorld()

            : this(null)

        {

        }

        public string Name

        {

            get

            { return myName; }

        }

        public void SayHello()

        {

            if (myName == null)

                System.Console.WriteLine("Hello World");

            else

                System.Console.WriteLine("Hello," + myName);

        }

    }

继续阅读