反射的使用

https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly.loadmodule?view=netframework-4.8#System_Reflection_Assembly_LoadModule_System_String_System_Byte___

// 在invoke的时间非静态方法需要一个目标, 则需要Object 参数
// typeof()  ,GetType(string st) GetMethod(string st)  如果这两个方法中的参数所在命名空间与程序集名称不符,则需要加上命名空间, 如下"T.Class1"
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
[assembly: AssemblyVersion("1.0.2000.0")]

 namespace T {  
    class Program
    {
        static void Main(string[] args)
        {
            Assembly assem = typeof(Class1).Assembly;
            Console.WriteLine(assem.FullName);

            Object o = assem.CreateInstance("T.Class1", false, BindingFlags.ExactBinding, null, new Object[] { "Hello" }, null, null);
            Type t = assem.GetType("T.Class1");
            MethodInfo m = t?.GetMethod("Test",new[] { typeof(string) });
            Object ob=m?.Invoke(null, new Object[] { "ell" });

            Console.WriteLine("\nAssembly entry point:");
            Console.WriteLine(assem.EntryPoint);

            Console.ReadKey();
        }
    }
}

 

 

 

 

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace T
{

    public class Class1
    {
         string xx;
        public void Test(string st)
        {
            Console.WriteLine(st+xx);

        }

        public Class1(string x)
        {
            xx = x;
        }
    }
}

 

Java反射可以让我们在运行时获取和操作类的信息,包括类的属性、方法、构造函数等。下面是一个使用Java反射的简单案例: 假设我们有一个类Person: ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public void sayHello() { System.out.println("Hello, my name is " + name + ", I am " + age + " years old."); } } ``` 现在,我们可以使用反射来获取和调用Person类的构造函数和方法: ```java import java.lang.reflect.Constructor; import java.lang.reflect.Method; public class ReflectionExample { public static void main(String[] args) throws Exception { // 获取Person类的Class对象 Class<Person> personClass = Person.class; // 获取Person类的构造函数 Constructor<Person> constructor = personClass.getConstructor(String.class, int.class); // 使用构造函数创建Person对象 Person person = constructor.newInstance("Tom", 20); // 获取Person类的sayHello方法 Method sayHelloMethod = personClass.getMethod("sayHello"); // 调用sayHello方法 sayHelloMethod.invoke(person); } } ``` 以上代码中,我们首先通过`Person.class`获取了Person类的Class对象,然后使用`getConstructor`方法获取了Person类的构造函数,并使用构造函数创建了一个Person对象。接着,我们使用`getMethod`方法获取了Person类的`sayHello`方法,并使用`invoke`方法调用了该方法。最终,我们输出了`Hello, my name is Tom, I am 20 years old.`。 这只是一个简单的反射案例,实际上Java反射还可以做很多其他的事情,比如动态代理、注解处理等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值