c#反射用法例子

    技术2022-05-20  32

    using System;using System.Collections.Generic;using System.Text;

    using System.Reflection;namespace RefDemo{    class Program    {        static void Main(string[] args)        {            //通过反射得到 RefDemo.Test 类的类型(有两种方式)

                //第一种方式:获取当前正在运行的程序集中的类型,类型为“命名空间.类型”            //Type type = Assembly.GetExecutingAssembly().GetType("RefDemo.Test");

                //第二种方式:加载指定的程序集,再获取其中的类型,Load()方法中的参数为程序集名称            Type type = Assembly.Load("RefDemo").GetType("RefDemo.Test");

                //通过反射调用Test类的静态方法StaticMethod            type.GetMethod("StaticMethod").Invoke(null, null);

                //通过反射创建 RefDemo.Test 类的对象(不带参的构造函数)            object obj = Assembly.GetExecutingAssembly().CreateInstance("RefDemo.Test");

                //通过反射调用 obj 对象的 TestMethod3 方法,不带参数            type.GetMethod("TestMethod2").Invoke(obj, null);

                //通过反射调用 obj 对象的 TestMethod3 方法,并传一个参数(值为 aaa )            type.GetMethod("TestMethod3").Invoke(obj, new object[] { "aaa" });

                //通过调用带参的构造函数来得到对象            ConstructorInfo ci = type.GetConstructor(new Type[] { typeof(string) });            object test = ci.Invoke(new object[] { "bbb" });            type.GetMethod("TestMethod3").Invoke(test, new object[] { "bbb" });        }    }

        public class Test    {        public static void StaticMethod()        {            Console.WriteLine("StaticMethod方法的输出");        }

            public static void TestMethod2()        {            Console.WriteLine("TestMethod2方法的输出");        }        public static void TestMethod3(string str)        {            Console.WriteLine(str);        }

            public Test(string str)        {            this._str = str;        }        string _str;        public void GetStr()        {            Console.WriteLine(this._str);        }        public Test()        {        }    }}


    最新回复(0)