反射的简单应用

首先有一个类

 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

时间: 02-02

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

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

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

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

反射 基于反射的简单工厂

反射 访问修饰符只是给编译器看的,反射中可以完全操控到无论私有不私有(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()

C#反射生成简单sql语句

static void Main(string[] args) { book book = new book();//实体类 booktest b1 = new booktest(); book.bookid = "1"; book.bookname = "计算机原理"; book.bookprice = 32.04M; string sql = CreateInsertSQL(book); } public static string CreateInsertSQ

【JAVAWEB学习笔记】11_XML&反射

解析XML总结(SAX.Pull.Dom三种方式) 反射的简单介绍: 反射 1.什么是反射技术? 动态获取指定类以及类中的内容(成员),并运行其内容. 应用程序已经运行,无法在其中进行new对象的建立,就无法使用对象.这时可以根据配置文件的类全名去找对应的字节码文件,并加载进内存,并创建该类对象实例.这就需要使用反射技术完成 2.获取class对象的三种方式 获取Class对象的方式一: 通过对象具备的getClass方法(源于Object类的方法).有点不方便,需要用到该类,并创建该类的对象,

day6 反射,hashlib模块,正则匹配,冒泡,选择,插入排序

一.反射(自省) 首先通过一个例子来看一下本文中可能用到的对象和相关概念. import sys # 模块,sys指向这个模块对象import inspectdef foo(): pass # 函数,foo指向这个函数对象 class Cat(object): # 类,Cat指向这个类对象 def __init__(self, name='kitty'): self.name = name def sayHi(self): # 实例方法,sayHi指向这个方法对象,使用类或实例.sayHi访问