反射的简单应用

首先有一个类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace ConsoleApplication1
 8 {
 9     public class demo
10     {
11         public string name = "程序员";
12     }
13 }

测试类

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

namespace ConsoleApplication1
{

    class Program
    {
        static void Main(string[] args)
        {

            Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
            Type type = assembly.GetType("ConsoleApplication1.demo");     //命名空间名 + 类名
            object obj = Activator.CreateInstance(type, true);

            FieldInfo classField = type.GetField("name");
            string name = classField.GetValue(obj).ToString();
            Console.WriteLine(name);

        }
    }
}

运行后发现已经获取得到值了

因为Activator.CreateInstance是创建一个新实例。

但只想想想。这个name的值是固定的。也就是在项目中需要动态赋值

然后动态反射出来。即反射获取当前实例的值

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Reflection;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7
 8 namespace ConsoleApplication1
 9 {
10
11     class Program
12     {
13         static void Main(string[] args)
14         {
15
16             //创建一个实例
17             demo d = new demo();
18             d.name = "开发工程师";
19
20             FieldInfo field = d.GetType().GetField("name");//获取类中的一个Field
21             object fieldValue = field.GetValue(d);//获取这个实例中的Field的代表的属性
22
23             //Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
24             //Type type = assembly.GetType("ConsoleApplication1.demo");     //命名空间名 + 类名
25             //object obj = Activator.CreateInstance(type, true);
26
27             //FieldInfo classField = type.GetField("name");
28             //string name = classField.GetValue(obj).ToString();
29             Console.WriteLine(fieldValue);
30
31         }
32     }
33 }

结果是正确的。

博客园有很多前辈写的

http://www.cnblogs.com/davidyang78/archive/2010/06/09/1754562.html

http://www.cnblogs.com/zhangpengshou/archive/2012/03/21/2409206.html

时间: 2024-10-12 19:35:22

反射的简单应用的相关文章

C++利用反射和简单工厂模式实现业务模块解耦

1. 业务说明 为了便于说明,举一个简单的例子.假设现在有一个项目需要建立一个和银行交互的平台,目前只接入工商银行,后续接入其他银行,每个银行的业务都有差异,报文格式可能也不一致. 这里只列举几个简要的流程,仅包括拼报文,发送报文,接收报文,解析报文,其余整体架构以及后续处理等内容省略. 2. 初步设计 创建一个银行交互类 BankOpt,包括四个函数: int setMsg(); //拼报文 int sendMsg(); //发送报文 int getMsg(); //接收报文 int pars

通过java反射实现简单的关于MongoDB的对象关系映射(ORM).

通过阅读MongoDB  3.2.1的官方文档中关于java 编程发现最新的文档并没有实现对对象到Document的映射,所以自己有了利用反射实现简单的关系映射. 1.定义抽象类:AbstractMongoSession import java.util.List; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.client.MongoCollection; import com.mo

java反射机制简单介绍

1.字节码.所谓的字节码就是当java虚拟机载入某个类的对象时,首先须要将硬盘中该类的源码编译成class文件的二进制代码(字节码),然后将class文件的字节码载入到内存中,之后再创建该类的对象 2.java反射的基础是Class类(注意不是小写的class),Class类实例代表着内存中的一份字节码.常见的获取Class类对象的方法例如以下(第一种为对象的方法,另外一种为类的方法): Dog dog = new Dog(); Class dogClass = dog.getClass();

java反射(四)--反射与简单java类

一.传统简单java类 简单的java类主要是由属性所组成,并且提供有相应的setter以及getter的处理方法,同时简单java类最大的特征就是通过对象保存相应的类的属性内容,但是如果使用传统的简单java类的开发,那么也会面临非常麻烦的困难: 1 class Emp{ 2 private String ename; 3 private String job; 4 5 public void setEname(String ename) { 6 this.ename = ename; 7 }

利用反射实现简单的Spring注解注入实例

一时兴起,这两天看了看Spring的源代码,就想写一个简单的Spring利用注解注入!!Spring的注解注入方式给了我们很方便的好处!大家应该都了解Spring的注入原理,在这里写下一个非常简单的使用注解来注入的实例,做个小小的笔记! 要使用注解,那就绝对和反射离不开.摘抄一段 Reflection是Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性.例如,使用它能获得 Java 类中各成员的名称并显示出来. J

有关反射和简单工厂模式的简单实现

先抛出两个概念,反射机制和简单工厂模式. 一句话谈谈自己的理解 反射机制就是由参数(包名类名的字符串),获取具体类的属性方法.简单工程模式就是由一个类作公共出口来生成其他类的实例,父类子类生成模式的简单应用,可以由参数来决定具体需要的实例.往下看,是我搜到的解释,相对完善一点. 什么是反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制.上

Java反射的简单入门

1.Class的简单介绍 Class类的类表示正在运行的Java应用程序中的类和接口. 枚举是一种类,一个注解是一种接口, 每个数组也属于一个反映为类对象的类,该对象由具有相同元素类型和维数的所有数组共享. 原始Java类型( boolean , byte , char , short , int , long , float和double ),和关键字void也表示为类对象. 摘自jdk1.8中文版,刚开始看可能不懂,现在逐句来解释一下. 第一句话:一个类被加载以后,JVM就会在内存中给创建一

反射 基于反射的简单工厂

反射 访问修饰符只是给编译器看的,反射中可以完全操控到无论私有不私有(GAC :Gobal Assemble Cache)全局程序集缓存得到assembly的方法1.0*在当前运行目录下面 加载对应的程序集assembly ass1=assembly.load(“lib”)2.0加载制定目录下面的程序集assembly.loadfile()或者loadfrom()3.0加载当前运行程序域中的所有程序集 Assembly[] asss = AppDomain.CurrentDomain.GetAs

黑马程序员_java反射的简单使用

反射概述: 一个已经写好的应用程序,后期要添加新功能,但一般无法获取该应用程序的源码,无法直接在该应用程序中用new创建对象,该怎么办?既然子类不确定,可以通过对外提供配置文件的形式,将不确定的信息存储到配置文件中即可.该应用程序需要在设计时写好如何读取配置文件信息?怎么做呢,先存储指定的子类名,根据具体的名称找该类并进行加载和对象的创建,这些动作都在前期定义软件时写好. 没有类之前就将创建对象的动作完成了.这就是动态的获取指定的类,并使用类中的功能,这就是反射技术.反射技术的出现大大的提高了程

java反射机制-简单实例

public class Car { private String brand; private String color; private int maxSpeed; public Car() { } public Car(String brand, String color, int maxSpeed) { this.brand = brand; this.color = color; this.maxSpeed = maxSpeed; } public String getBrand()