封装方法:通过方法名调用类内的方法

调用本类的:

    public class Test2
    {
        public TypeMethod methods = new TypeMethod();

        public void Run()
        {
            //将需要调用的方法加入集合中,加入之后就可以输出方法描述并通过序号调用该方法了
            methods.Add("Method1", "这里是方法1", 1);
            methods.Add("Method2", "这里是方法2", 2);

            methods.Print();                //打印:有哪些功能,通过哪个序号可以调用该功能
            var name = methods.Select();    //选择功能(返回方法名)

            Invoke(name, null);             //调用方法
        }

        /// <summary>
        /// 根据方法名调用该类的某个方法(这个方法可以直接放到父类里,然后继承的子类就也都可以通过方法名调用具体的方法)
        /// </summary>
        /// <param name="methodName"></param>
        /// <param name="parameters"></param>
        public void Invoke(string methodName, object[] parameters)
        {
            var method = this.GetType().GetMethod(methodName);
            method.Invoke(this, parameters);
        }

        public void Method1()
        {
            Console.WriteLine("这里是方法1");
        }

        public void Method2()
        {
            Console.WriteLine("这里是方法2");
        }
    }

    public class TypeMethod
    {
        /// <summary>
        /// 方法集合
        /// </summary>
        private List<Item> methods = new List<Item>();

        public void Add(string name, string des, int order)
        {
            methods.Add(new Item { Name = name, Des = des, Order = order });
        }

        /// <summary>
        /// 输出各功能及对应的序号
        /// </summary>
        public void Print()
        {
            var ms = methods.OrderBy(m => m.Order).ToList();
            int i = 0;
            foreach (var item in ms)
            {
                i++;
                Console.WriteLine($" {i}、{item.Des}");
            }
        }
        /// <summary>
        /// 选择功能(返回功能的名称)
        /// </summary>
        /// <returns></returns>
        public string Select()
        {
            Console.Write(" 请选择您要执行的功能:");
            int key = Convert.ToInt32(Console.ReadLine());
            var ms = methods.OrderBy(m => m.Order).ToList();
            if (key > 0 && key <= methods.Count)
            {
                return ms[key - 1].Name;
            }
            else
            {
                Console.WriteLine("未选择有效的功能!");
                return "";
            }
        }
    }

    public class Item
    {
        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string Des { get; set; }
        /// <summary>
        /// 排序(使顺序更易控)
        /// </summary>
        public int Order { get; set; }
    }

调用其他类的时候是比较类似的,可以参考:https://www.cnblogs.com/coderJiebao/p/CSharp09.html

原文地址:https://www.cnblogs.com/zhangchaoran/p/12981083.html