`
sakakokiya
  • 浏览: 507273 次
  • 性别: 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

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

    .net中的反射,asp.net反射

    一、什么是反射? 反射是.NET框架提供的一种机制,它允许程序在运行时获取关于类型、模块和程序集的信息,并能根据这些信息创建和操作对象。通过System.Reflection命名空间中的类,如Type、MethodInfo、...

    c#反射教程(菜鸟)

    三、什么是反射? 反射是 .NET 中在应用程序运行时获取一个类的详细信息的一种方式。反射可以让程序员在程序运行期获得类的信息,从而实现动态创建对象、调用方法、设置属性等操作。 四、为什么要在运行时才获得类...

    Java – 什么是java反射?

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

    JAVA反射简单例子

    1. **什么是反射?** 反射是指在运行时,程序可以获取类的信息(如类名、属性、方法等),并动态地创建对象和调用方法。这使得Java代码能够具有更高的灵活性和自适应性,能够处理未知类型的对象。 2. **Class类** ...

    C# Winform 反射调用打开窗体

    1. **什么是反射?** 反射允许程序在运行时检查自身的信息,包括类型、属性、方法等,并且可以动态创建对象实例,调用方法,访问字段和属性。这在设计灵活的系统,如插件架构、配置驱动的代码或元数据驱动的应用...

    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.什么是反射?

    c#反射例子(源码)

    1. **什么是反射?** 反射是程序在运行时获取自身信息的能力,包括类、接口、属性、方法等元数据。它允许我们动态地创建对象、调用方法、访问属性,以及在运行时检查和操作程序集、模块和类型的细节。 2. **C#中的...

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

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

    常见 ASP.NET 概念(开源,说明)

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

    Java反射机制——类的加载方法,创建对象,获取方法以及结构

    1. **什么是反射?** 在Java中,反射机制是在程序运行时,通过Class对象来获取类的结构信息,包括类名、字段、方法、构造器等,并能直接操作这些元素。类的加载完成后,JVM会在方法区创建一个对应的Class对象,这个...

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

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

    Go系列教程之反射的用法

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

    Java反射机制 深入浅出

    #### 一、什么是反射? 反射是Java中一项非常重要的特性,它允许程序在运行时动态地获取类的信息,并且能够直接操作这些信息。通俗来说,反射就像是为Java对象装上了一面镜子,通过这面镜子我们可以看到对象的所有...

    java反射demo

    ### 一、什么是反射? 反射是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java...

    Java面试题,常见面试题及答案汇总.docx

    1. 什么是反射? Answer: 反射是Java提供的一种机制,允许在运行时获取类和对象的信息,并进行修改。 2. 什么是Java序列化? Answer: 序列化是将对象转换为字节流的过程,以便于对象的存储或传输。 对象拷贝 1. 为...

    200个Java经典面试题总结附带答案.docx

    14. 什么是反射?(Java 反射机制,可以在运行时访问和修改类的信息) 15. 什么是 Java 序列化?什么情况下需要序列化?(序列化是将对象转换为字节流,用于网络传输或持久化) Java 异常 16. `throw` 和 `throws`...

Global site tag (gtag.js) - Google Analytics