JAVA反射与C#反射之比较
来源:互联网 发布:国威电话交换机编程 编辑:程序博客网 时间:2024/04/29 17:48
JAVA反射与C#反射之比较
一.什么是反射
在运行时环境,能否根据一个类的名字,来得到这个类的属性和方法?对于任何一个运行时的对象能否动态调用这个对象的方法?答案是可以的。这种动态的获取类的信息以及动态调用一个对象的方法的机制叫做反射。
反射提供的主要功能:
1.在运行时判断任意一个对象所属的类
2.在运行时构造一个类的对象
3.在运行时判断一个类所具有的属性和方法
4.在运行时调用一个对象的方法
实现反射的过程:
1.加载一个类
2.根据这个类动态创建一个对象
3. 动态得到这个对象的方法
4.调用这个对象的方法
二.JAVA中的反射
需要导入包:import java.lang.reflect;
try {
//加载类的三种方法
// Class<?> classType = Class.forName("com.ls.reflecttest.Person");
// Class<?> classType = Person.class;
Class<?> classType = Person.getClass();
//创建对象,第一种方法只能调用默认的构造方法,第二种方法可以调用带参的构造方法
// Object object = classType.newInstance();
Object object = classType.getConstructor(new Class[] {int.class, String.class, int.class}).newInstance(new Object[] {12, "wdw", 12});
//动态得到该对象的方法
Method sayHelloMethod = classType.getMethod("sayHello", new Class[]{String.class});
sayHelloMethod.invoke(object, new Object[] {"wdw"});
//动态得到所有属性,
Field[] filds = classType.getDeclaredFields();
for(int i=0; i < filds.length; i++) {
System.out.println(filds[i].getName());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
此外还有很多方法:得到所有方法getDeclaredMethods(), getField()等等
三.C#中的反射
感觉跟JAVA中的反射机制是一样的,首先引入命名空间:using System.reflection;
//得到类型
Type type = Type.GetType("ReflectTest.Person");
//得到该类型所在的程序集
Assembly assembly = Assembly.GetAssembly(type);//类似于JAVA中的加载
//C#中可以直接加载文件
//Assembly assembly = Assembly.LoadFile("文件路径"); //JAVA中没有这种方法
//创建对象
Object o = assembly.CreateInstance("ReflectTest.Person");
//动态获得方法
MethodInfo method = type.GetMethod("ToString");
//调用方法
Console.WriteLine(method.Invoke(o, new object[] { }));
四.总结
原来各种语言都是相同的,反射机制也是一样的只不过换了几个类,几个方法名而已,慢慢体会其实不单单是反射机制,两种语言有很多相同之处,思想都是一样的,继续努力,加油!
- JAVA反射与C#反射之比较
- JAVA反射与C#反射之比较
- JAVA 反射与 C#反射
- C# 反射性能比较
- cglib与java反射的比较
- C#之反射与程序集
- C#之反射与程序集
- C#之反射
- C#反射之Assembly
- c#之反射_FieldInfo_GetField_
- C#之反射
- C#之反射
- C#之反射
- C#反射之初始
- c#之反射
- 【Java基础】RTTI与反射之Java
- 【Java基础】RTTI与反射之Java
- 恶补 Java 系列之异常与反射
- [Android 界面]重画Progressbar的进度
- [Android 界面]Android TextSwitcher(文字交换器)的使用
- Goolge 爬虫改进中,我们需要改变SEO 策略
- openwrt固件备份与还原
- C++ Primer Plus 7.2
- JAVA反射与C#反射之比较
- 怎么样才能快速加分啊
- oracle trunc for dates
- think in log
- 在即时通讯领域可以和QQ抗争的产品(一)阿里巴巴:让人升值的即时通讯
- 编程的境界
- PHP随机数
- hdu 2571 命运
- 自评