- 浏览: 507317 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (672)
- 随便写写 (3)
- javascript (16)
- Java exam (58)
- JSP exam (25)
- Servlet exam (25)
- Struts exam (24)
- Spring exam (24)
- Hibernate exam (19)
- EJB exam (25)
- SOA exam (6)
- AJAX exam (25)
- Web开发 exam (25)
- 软件工程 exam (25)
- 项目管理 exam (25)
- .NET exam (23)
- ASP.NET exam (24)
- C# exam (24)
- C++ exam (25)
- C语言 exam (13)
- ASP exam (0)
- PHP exam (0)
- Ruby exam (0)
- Python exam (0)
- Delphi exam (0)
- Linux exam (0)
- UNIX exam (25)
- 数据库 exam (24)
- Oracle exam (25)
- SQL Server exam (20)
- MySQL exam (16)
- Mobile开发 exam (10)
- 嵌入式开发 exam (6)
- 网络安全 exam (0)
- 网络技术 exam (0)
- 综合技术 exam (0)
- HR面试 exam (0)
- 英语面试 exam (0)
- 外企面试 exam (0)
- 软件测试 exam (0)
- QTP exam (0)
- LoadRunner exam (0)
- 网友面经 exam (0)
- 应届生 exam (0)
- 面试指导 exam (0)
- IQ测试 exam (0)
- Flex exam (2)
- uml-ea (1)
最新评论
-
dxking100:
远光没有笔式题的说..
最新远光软件笔试题面试题内容(1) -
heming_way:
谢谢,正在复习软件工程考试呢,呵呵
《软件工程》选择题 -
梅玲达:
可以更详细点吗?
Hibernate中Criteria 和DetachedCriteria的作用是什么? -
buptjian:
学习下,试试看,谢谢啊~
Prototype如何实现页面局部定时刷新? -
bubblegum89:
这个。。。和我笔试时候做的 感觉完全不一样
最新远光软件笔试题面试题内容(3)
反射,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
通过对类型动态实例化后,还可以对其执行操作
简单来说就是用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
发表评论
-
非常详细的C#面试题集
2010-08-12 16:46 8271、在C#中,string str = null与string ... -
说出你对remoting 和webservice的理解和应用
2010-08-12 16:46 695web服务,是利用SOAP(简单对象访问协议,Simple O ... -
What’s the difference between an interface and abstract class? (接口与抽象类有什么区别)
2010-08-12 16:46 617接口用于规范,抽象类用于共性。接口中只能声明方法,属性,事件, ... -
P/Invoke是什么?
2010-08-12 16:46 714在受控代码与非受控代码进行交互时会产生一个事务(transit ... -
params 有什么用?
2010-08-12 16:46 751params 关键字在方法成员的参数列表中使用,为该方法提供了 ... -
编写一个类体现构造,公有,私有方法,静态,私有变量
2010-08-12 16:46 687public class stu{private string ... -
别名指示符是什么?
2010-08-12 16:46 784通过别名指示符我们可以为某个类型起一个别名主要用于解决两个命名 ... -
Hashtable 添加内容的方式有哪几种,有什么区别?
2010-08-12 16:46 666Hashtable.Add()方法;实例化一个Hashtabl ... -
string = null 和string = “”的区别
2010-08-12 16:46 767答:前者没有分配内存控件,后着分配了 -
用C#语言写出与SQLSERVER访问时的具体过程
2010-08-12 16:46 704用C#语言写出与SQLSERVER访问时的具体过程。在涉及到S ... -
南京AJS计算机公司笔试题
2010-08-12 16:46 7211.英文解释:Appdomain,Assembly.Refle ... -
抽象类和接口的区别?
2010-08-12 16:46 620抽象类(abstract class)可以包含功能定义和实现, ... -
Can a struct inherit from another class? (结构体能继承类吗)
2010-08-12 16:46 1057每个结构都派生于System.ValueType,它又派生于S ... -
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2010-08-12 16:46 7861.下面是M层的,其他层的自己写using System.Da ... -
What’s the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2010-08-12 16:46 636答:Debug类里所提供的函数仅在编译时带#Debug宏参数才 ... -
explicit 和 implicit 的含义?
2010-08-12 16:46 804explicit 和 implicit 属于转换运算符,如用这 ... -
用C#语言写出在本地创建一个UDP接收端口的具体过程
2010-08-12 16:46 885答:const int port = 8000 ;//定义端口 ... -
Can a struct inherit from another struct? (结构体能继承结构体吗)
2010-08-12 16:46 822不能 -
如何选择使用结构还是类
2010-08-12 16:46 5311.堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好 ... -
What’s the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2010-08-12 16:46 734浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的 ...
相关推荐
反射是Java提供的一个重要功能,很多Java框架都用到反射。
4. Java中什么是反射? 5. Java中什么是线程安全? 6. Java中抽象类和接口的区别是什么? 7. Java中什么是异常? 8. Java中如何防止对象的clone? 9. Java中什么是泛型? 10. Java中如何实现单例模式?
一、什么是反射? 反射是.NET框架提供的一种机制,它允许程序在运行时获取关于类型、模块和程序集的信息,并能根据这些信息创建和操作对象。通过System.Reflection命名空间中的类,如Type、MethodInfo、...
三、什么是反射? 反射是 .NET 中在应用程序运行时获取一个类的详细信息的一种方式。反射可以让程序员在程序运行期获得类的信息,从而实现动态创建对象、调用方法、设置属性等操作。 四、为什么要在运行时才获得类...
什么是反射? Java反射机制是在运行状态中的 对于任意一个类,都能够知道这个类的所有属性和方法(动态获取的信息); 对于任意一个对象,都能调用它的任意一个方法和属性(动态调用对象的方法) 这种动态...
1. **什么是反射?** 反射是指在运行时,程序可以获取类的信息(如类名、属性、方法等),并动态地创建对象和调用方法。这使得Java代码能够具有更高的灵活性和自适应性,能够处理未知类型的对象。 2. **Class类** ...
1. **什么是反射?** 反射允许程序在运行时检查自身的信息,包括类型、属性、方法等,并且可以动态创建对象实例,调用方法,访问字段和属性。这在设计灵活的系统,如插件架构、配置驱动的代码或元数据驱动的应用...
1.静态成员和非静态成员的区别? 2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的?...25.什么是反射?
1.静态成员和非静态成员的区别? 2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的?...25.什么是反射?
1. **什么是反射?** 反射是程序在运行时获取自身信息的能力,包括类、接口、属性、方法等元数据。它允许我们动态地创建对象、调用方法、访问属性,以及在运行时检查和操作程序集、模块和类型的细节。 2. **C#中的...
什么是反射,什么是暴力反射
1.静态变量和非静态变量的区别? 2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么...25.什么是反射? shadom@foxmail.com
1. **什么是反射?** 在Java中,反射机制是在程序运行时,通过Class对象来获取类的结构信息,包括类名、字段、方法、构造器等,并能直接操作这些元素。类的加载完成后,JVM会在方法区创建一个对应的Class对象,这个...
反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们...
什么是反射? 为何需要检查变量,确定变量的类型? reflect 包 reflect.Type 和 reflect.Value reflect.Kind NumField() 和 Field() 方法 Int() 和 String() 方法 完整的程序 我们应该使用反射吗? 让我们...
#### 一、什么是反射? 反射是Java中一项非常重要的特性,它允许程序在运行时动态地获取类的信息,并且能够直接操作这些信息。通俗来说,反射就像是为Java对象装上了一面镜子,通过这面镜子我们可以看到对象的所有...
### 一、什么是反射? 反射是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java...
1. 什么是反射? Answer: 反射是Java提供的一种机制,允许在运行时获取类和对象的信息,并进行修改。 2. 什么是Java序列化? Answer: 序列化是将对象转换为字节流的过程,以便于对象的存储或传输。 对象拷贝 1. 为...
14. 什么是反射?(Java 反射机制,可以在运行时访问和修改类的信息) 15. 什么是 Java 序列化?什么情况下需要序列化?(序列化是将对象转换为字节流,用于网络传输或持久化) Java 异常 16. `throw` 和 `throws`...