C# 基础加固 三 调用反射中的方法

调用反射类型中的函数一种是 使用 动态类型  dynamic  直接调用,这里对这种方法不深究

注意  : 反射查找 泛型类的时候  需要指定 占位符   如          

var genericType = dll.GetType("TryRef.GenericCls`1");

这是有一个类型参数的情况 ,

但是 获取泛型方法不能添加占位符 直接就是 方法的名字

  var method1 = commonType.GetMethod("GenericMethod");

 

dll中的目标类:

namespace TryRef
{
    class PrivMethod
    {
        public void Method(string str)
        {
            Console.WriteLine($"我是一个普通方法:{str}!");
        }


        private void PrivateMethod(string str)
        {
            Console.WriteLine($"我是一个私有方法:{str}!");
        }


        static public void StaticMethod(string str)
        {
            Console.WriteLine($"我是一个静态方法:{str}!");
        }

        public void GenericMethod<T>(T pram)
        {
            Console.WriteLine($"我是一个泛型方法:{pram.GetType().Name}!");
        }

    }

调用实例:

 class Program
    {
      // public static string dllName = ConfigurationSettings.AppSettings["dllName"];
        static void Main(string[] args)
        {
            var dll = Assembly.Load("TryRef");
            var commonType = dll.GetType("TryRef.PrivMethod");
            var commonObj = Activator.CreateInstance(commonType);

            //普通方法
            {
                var method1 = commonType.GetMethod("Method");
                var ret = method1.Invoke(commonObj, new object[] { "123" });
            }

            //私有方法------>反射是可以突破限制调用私有方法的
            {
                var method1 = commonType.GetMethod("PrivateMethod", BindingFlags.Instance |  BindingFlags.NonPublic );
                var ret = method1.Invoke(commonObj, new object[] { "123" });
            }

            //静态方法------>
            {
                var method1 = commonType.GetMethod("StaticMethod");
                var ret = method1.Invoke(commonObj, new object[] { "123" });
                var ret2 = method1.Invoke(null, new object[] { "123" });
            }

            //泛型方法------>
            {
                var method = commonType.GetMethod("GenericMethod");
                var makeTypeMethod = method.MakeGenericMethod(new Type[] { typeof(string) });
                var ret = makeTypeMethod.Invoke(commonObj, new object[] { "123" });
              
            }



            //如果不知道类中有哪些方法以及方法需要的参数可以使用以下代码
            //{
            //    foreach (var item in commonType.GetMethods())
            //    {
            //        Console.WriteLine($"************方法名称:{item.Name} ***************");
            //        foreach (var t in item.GetParameters())
            //        {
            //            Console.WriteLine($"参数类型:{t.ParameterType}");
            //        }
            //    }
            //}


            Console.ReadLine();
           
        }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值