zoukankan      html  css  js  c++  java
  • c#输入方法名来调用方法(反射)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace zhiXing
    {
        class Program
        {
            static void Main(string[] args)
            {
                //方法1
                /*
                Type t = typeof(TestA);
                MethodInfo mt = t.GetMethod("My");
                TestA ta = new TestA();
                string str = (string)mt.Invoke(ta, new object[] { 5 });
                */
                
                //方法2
                //加载程序集
                Assembly s = Assembly.Load("zhiXing");
                //得到类
                Type tpe = s.GetType("zhiXing.TestA");
                //得到方法
                MethodInfo method = tpe.GetMethod("My");
                //安全判断
                {
                    //获取需要传入的参数
                    ParameterInfo[] parms = method.GetParameters();
                    //这里是判断参数类型
                    foreach (ParameterInfo ss in parms)
                    {
                        if (ss.ParameterType == typeof(int))
                        {
                            Console.WriteLine("参数类型匹配");
                        }
                        else
                        {
                            Console.WriteLine("参数类型不匹配");
                        }
                    }
                }
                //获取 类的对象
                object obj = s.CreateInstance("zhiXing.TestA");
                //调用
                method.Invoke(obj, new object[] { 5 });
                
            }
        }
    
        public class TestA
        {
            public void My(int a)
            {
                Console.WriteLine("哈哈哈哈哈" + a);
                Console.ReadKey();
            }
        }
    
    }

    =================================================================================================

    方法1其实已经实现了,在一个自己的类中,输入自己的方法名来执行函数

    实例

    public class Execute : MonoBehaviour {
    
        // Use this for initialization
        void Start () {
            Type t = typeof(Execute);
    //获取共有方法 MethodInfo mt
    = t.GetMethod("My");
         //获取私有方法, BindingFlags类型枚举,BindingFlags.NonPublic | BindingFlags.Instance 组合才能获取到private私有方法,
         //MethodInfo mt = t.GetMethod("My", BindingFlags.NonPublic | BindingFlags.Instance);
            //若公有和私有都要的话  BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public
         string str = (string)mt.Invoke(this, new object[] { 5 });
        }
        
        // Update is called once per frame
        void Update () {
            
        }
    
        public void My(int a)
        {
            Debug.Log("哈哈哈");
        }
    }

    【反射的官方中文文档】

    https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/reflection

    有个最简单的办法:  Invoke("mothodName", 0)

  • 相关阅读:
    用 Python 带你看各国 GDP 变迁
    Fluent Interface(流式接口)
    probing privatePath如何作用于ASP.NET MVC View
    Word插入htm文件导致文本域动态增加的一个问题
    Visual Studio 2013附加进程调试IE加载的ActiveX Control无效解决方法
    Ubuntu下Chrome运行Silverlight程序
    Windows Phone Bing lock screen doesn't change解决方法
    SPClaimsUtility.AuthenticateFormsUser的证书验证问题
    Web Service Client使用Microsoft WSE 2.0
    Visual Studio 2013安装Update 3启动crash的解决方法
  • 原文地址:https://www.cnblogs.com/sanyejun/p/8575458.html
Copyright © 2011-2022 走看看