zoukankan      html  css  js  c++  java
  • [No000085]C#反射Demo,通过类名(String)创建类实例,通过方法名(String)调用方法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    class test
    {
        public void Method()//1
        {
            Console.WriteLine("1:__" + "Method调用成功!");
        }
        public void Method(string str)//2
        {
            Console.WriteLine("2:__" + str);
        }
    
        public string Method(string str1, string str2)//3
        {
            string className1 = this.GetType().FullName;//非静态方法中获取类名
            string className2 = MethodBase.GetCurrentMethod().ReflectedType.FullName;//静态方法中的获取类名
            Console.WriteLine("3:__;类名"+className1+"_"+ className2);
            return "3:__" + str1 + str2;
        }
    }
    class Program
    {
        public static void run(string testcase)
        {
            string strClass = "test";  //命名空间+类名
            string strMethod = "Method";//方法名
    
            Type type;
            object obj;
    
            type = Type.GetType(strClass);//通过string类型的strClass获得同名类“type”
            obj = System.Activator.CreateInstance(type);//创建type类的实例 "obj"
    
            MethodInfo method = type.GetMethod(strMethod, new Type[] { });//取的方法描述//通过string类型的strMethod获得同名的方法“method”//1
            method.Invoke(obj, null);//type类实例obj,调用方法"method"//1
    
            method = type.GetMethod(strMethod, new Type[] { typeof(String) });//取的方法描述//2
            object[] objs = new object[] { testcase };
            method.Invoke(obj, objs);//t类实例obj,调用方法"method(testcase)"//2
    
            method = type.GetMethod(strMethod, new Type[] { typeof(String), typeof(String) });//取的方法描述//2
            var result = (string)method.Invoke(obj, new object[] { "a", "b" });//3
            Console.WriteLine(result);//3
    
            //string className = this.GetType().FullName;
            string className = MethodBase.GetCurrentMethod().ReflectedType.FullName;//静态方法中的获取类名
            Console.WriteLine(className);
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            string testcase = "测试呀";//自己定义的类
            run(testcase);
        }
    }
  • 相关阅读:
    Kth Largest Element in an Array -- LeetCode
    First Missing Positive -- LeetCode
    Path Sum II (Find Path in Tree) -- LeetCode
    Email List
    Divide Two Integers -- LeetCode
    Delete Node in a Linked List
    Compare Version Numbers -- LeetCode
    Broken Code
    Trapping Rain Water (Bar Height) -- LeetCode
    Count and Say (Array Length Encoding) -- LeetCode
  • 原文地址:https://www.cnblogs.com/Chary/p/No000085.html
Copyright © 2011-2022 走看看