C# 反射(Reflection)使用讲解之 - 调用普通、私有方法、静态方法、重载方法(二)
小白浏览:5272022-08-31 08:06:29本文累计收益:0我也要赚钱

最近学习C#基础,简单记录一下C#中如何使用反射创建对象,并调用方法。

使用反射必须添加System.Reflection引用。

Assembly assembly = Assembly.LoadFrom("DB.MySql.dll");
Type type = assembly.GetType("DB.MySql.TestClass");
object testClass = Activator.CreateInstance(type);
//一般方法调用
MethodInfo methodInfo1 = type.GetMethod("Test1");
methodInfo1.Invoke(testClass, new object[] { "方法参数" });

//重载方法调用
MethodInfo methodInfo3 = type.GetMethod("Test2", new Type[] { });
methodInfo3.Invoke(testClass, null);
MethodInfo methodInfo2 = type.GetMethod("Test2", new Type[] { typeof(string) });//指定参数类型及个数
methodInfo2.Invoke(testClass, new object[] { "方法参数" });

//静态方法调用
//方式1
MethodInfo methodInfo4 = type.GetMethod("Test3");
methodInfo4.Invoke(testClass, new object[] { "方法参数" });
//方式2
MethodInfo methodInfo5 = type.GetMethod("Test3");
methodInfo5.Invoke(null, new object[] { "方法参数" });
//调用私有方法
MethodInfo methodInfo6 = type.GetMethod("Test4",BindingFlags.Instance|BindingFlags.NonPublic);
methodInfo6.Invoke(testClass, new object[] { "方法参数" });

方法类代码如下:

namespace DB.MySql
{
    public class TestClass
    {
        public TestClass() {
            Console.WriteLine($"这是{this.GetType()}无参构造方法");
        }
        public void Test1(string name)
        {
            Console.WriteLine($"这是{this.GetType()}Test1方法,类型为{name.GetType()}");
        }
        public void Test2()
        {
            Console.WriteLine($"这是{this.GetType()}Test2重载无参方法");
        }
        public void Test2(string name)
        {
            Console.WriteLine($"这是{this.GetType()}Test1重载1个参数方法,类型为{name.GetType()}");
        }
        public static void Test3(string name)
        {
            Console.WriteLine($"这是{typeof(TestClass)}Test3静态方法,类型为{name.GetType()}");
        }
        private void Test4(string name)
        {
            Console.WriteLine($"这是{typeof(TestClass)}Test3静态方法,类型为{name.GetType()}");
        }
    }
}

运行结果:

评论列表
发表评论
+ 关注