`
sakakokiya
  • 浏览: 488419 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

什么是反射?

阅读更多
反射,Reflection,通过它我们可以在运行时获得各种信息,如程序集、模块、类型、字段、属性、方法和事件
通过对类型动态实例化后,还可以对其执行操作
简单来说就是用string可以在runtime为所欲为的东西,实际上就是一个.net framework内建的万能工厂
一般用于插件式框架程序和设计模式的实现,当然反射是一种手段可以充分发挥其能量来完成你想做的任何事情(前面好象见过一位高人用反射调用一个官方类库中未说明的函数。。。)
示例:
using System;
using System.Collections.Generic;
using System.Text;
namespace Example25Lib
{
public class Class1
{
private string name;
private int age;
//如果显式的声明了无参数构造函数,客户端只需要用程序集的CreateInstance即可实例化该类
//在此特意不实现,以便在客户调用端体现构造函数的反射实现
//public Class1()
//{
//}
public Class1(string Name, int Age)
{
name = Name;
age = Age;
}
public void ChangeName(string NewName)
{
name = NewName;
}
public void ChangeAge(int NewAge)
{
age = NewAge;
}
public override string ToString()
{
return string.Format(”Name: {0}, Age: {1}”, name, age);
}
}
}
反射实例化对象并调用其方法,属性和事件的反射调用略去
using System;
using System.Collections.Generic;
using System.Text;
//注意添加该反射的命名空间
using System.Reflection;
namespace Example25
{
class Program
{
static void Main(string[] args)
{
//加载程序集
Assembly tmpAss = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + “Example25Lib.dll”);
//遍历程序集内所有的类型,并实例化
Type[] tmpTypes = tmpAss.GetTypes();
foreach (Type tmpType in tmpTypes)
{
//获取第一个类型的构造函数信息
ConstructorInfo[] tmpConsInfos = tmpType.GetConstructors();
foreach (ConstructorInfo tmpConsInfo in tmpConsInfos)
{
//为构造函数生成调用的参数集合
ParameterInfo[] tmpParamInfos = tmpConsInfo.GetParameters();
object[] tmpParams = new object[tmpParamInfos.Length];
for (int i = 0; i < tmpParamInfos.Length; i++)
{
tmpParams[i] = tmpAss.CreateInstance(tmpParamInfos[i].ParameterType.FullName);
if (tmpParamInfos[i].ParameterType.FullName == “System.String”)
{
tmpParams[i] = “Clark”;
}
}
//实例化对象
object tmpObj = tmpConsInfo.Invoke(tmpParams);
Console.WriteLine(tmpObj);
//获取所有方法并执行
foreach (MethodInfo tmpMethod in tmpType.GetMethods())
{
//为方法的调用创建参数集合
tmpParamInfos = tmpMethod.GetParameters();
tmpParams = new object[tmpParamInfos.Length];
for (int i = 0; i < tmpParamInfos.Length; i++)
{
tmpParams[i] = tmpAss.CreateInstance(tmpParamInfos[i].ParameterType.FullName);
if (tmpParamInfos[i].ParameterType.FullName == “System.String”)
{
tmpParams[i] = “Clark Zheng”;
}
if (tmpParamInfos[i].ParameterType.FullName == “System.Int32″)
{
tmpParams[i] = 27;
}
}
tmpMethod.Invoke(tmpObj, tmpParams);
}
//调用完方法后再次打印对象,比较结果
Console.WriteLine(tmpObj);
}
}
Console.ReadLine();
}
}
}
结果:
Name: Clark, Age: 0
Name: Clark Zheng, Age: 27
分享到:
评论

相关推荐

    反射的概念和简单使用.html

    反射是Java提供的一个重要功能,很多Java框架都用到反射。

    java面试常见问题(超详细).pdf

    什么是覆盖【Overriding】?它们有什么区别? Java中什么是多态?如何实现多态? Java中什么是接口?它有什么作用? Java中什么是抽象类?它有什么作用? Java中什么是final关键字?它有什么作用? Java中什么是...

    java最新高薪面试题库.docx

    什么是反射?Java中的反射有哪些应用场景? 什么是异常?Java中的异常有哪些类型?如何处理异常? 什么是并发集合?Java中的并发集合有哪些类型? 什么是线程池?Java中的线程池有哪些类型? 什么是高性能编程?如何...

    java面试题.pdf

    4. Java中什么是反射? 5. Java中什么是线程安全? 6. Java中抽象类和接口的区别是什么? 7. Java中什么是异常? 8. Java中如何防止对象的clone? 9. Java中什么是泛型? 10. Java中如何实现单例模式?

    Java – 什么是java反射?

    什么是反射?  Java反射机制是在运行状态中的  对于任意一个类,都能够知道这个类的所有属性和方法(动态获取的信息);  对于任意一个对象,都能调用它的任意一个方法和属性(动态调用对象的方法)  这种动态...

    Java中的反射

    1.什么是反射?,java反射的机制的相关类,什么是动态?

    C#基础概念二十五问

    1.静态成员和非静态成员的区别? 2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的?...25.什么是反射?

    C#的25个问题(内附代码示例)

    1.静态成员和非静态成员的区别? 2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的?...25.什么是反射?

    什么是反射,什么是暴力反射.xmind

    什么是反射,什么是暴力反射

    c#基础学习问答c#基础学习问答

    c#学习问答 包括: 1.静态变量和非静态变量的区别? 2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用?...6.sealed 修饰符是干什么的?...25.什么是反射?

    C#基础概念.doc

    C#基础概念: 1、静态变量和非静态变量的区别? 2、const 和 static readonly 区别? 3、extern 是什么意思? 4、abstract 是什么意思? 5、internal 修饰符起什么作用?...6、sealed 修饰符是干什么...25、什么是反射?

    C#反射在实际应用中的实例代码

    反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们...

    Go系列教程之反射的用法

    什么是反射? 为何需要检查变量,确定变量的类型? reflect 包 reflect.Type 和 reflect.Value reflect.Kind NumField() 和 Field() 方法 Int() 和 String() 方法 完整的程序 我们应该使用反射吗? 让我们...

    常见的java面试题及解答

    Java中什么是反射? 反射在Java中是指在运行时动态地获取类的信息,并可以动态地创建和调用对象。通过反射,可以访问类的属性和方法,甚至可以修改类的行为。反射在Java中是一个非常重要的机制,它在很多情况下都很...

    面试官再问你什么是反射,就把这篇文章发给他!

    1 什么是反射? 反射是一种可以间接操作目标对象的机制。当使用反射时,JVM 在运行的时候才动态加载类,对于任意类,知道其属性和方法,并不需要提前在编译期知道运行的对象是谁,允许运行时的 Java 程序获取类的...

    反射机制反射Dao 反射机制

    反射反射反射反射反射反射反射反射反射反射反射反射反射反射反射反射

    Java高级特性之反射学习总结

     一、 什么是反射?  二、反射能做什么?  一、 什么是反射?  用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉...

    C#根据反射和特性实现ORM映射实例分析

    什么是反射? 反射就是在运行时,动态获取对象信息的方法。比如:运行时获得对象有哪些属性,方法,委托等。 反射的作用? 能够实现运行时,动态调用对象的方法,以及动态设置、获取属性值等。 反射的示例: using...

    java反射 java反射 java反射java反射

    java反射 java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射

    07JVM是如何实现反射的?1

    07JVM是如何实现反射的?1

Global site tag (gtag.js) - Google Analytics