c#反射用法例子

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值