c#反射简单示例

反射无论在开发模式和实际应用中,都非常实用,下面用个小例子,来记录一下反射的简单用法

首先,准备一个将用于反射的类,并编译:

    public class Point {
        private int _x;
        private int _y;

        public int X {
            set { this._x = value; }
            get { return _x; }
        }

        public int Y {
            set { this._y = value; }
            get { return _y; }
        }
        public void Print() {
            Console.WriteLine("[{0},{1}]", this.X,this.Y);
        }

编译后记录编译后的路径,用于示例类进行反射

            string assemblyName = @"具体路径\Point.dll";
            string typeName = "aaa.Point";
            Assembly assembly = Assembly.LoadFrom(assemblyName);  //手动加载程序集
            //获取类型信息
            Type t = assembly.GetType(typeName);
            //根据类型创建对象
            object dObj = Activator.CreateInstance(t);
            //如果是字段,用下面方式赋值,本示例中是属性用PropertyInfo赋值
            //FieldInfo field1 = t.GetField("x");
            //FieldInfo field2 = t.GetField("y");
            //field1.SetValue(dObj, 100);
            //field2.SetValue(dObj, 200);

            PropertyInfo property1 = t.GetProperty("X");
            PropertyInfo property2 = t.GetProperty("Y");
            property1.SetValue(dObj, 111, null);
            property2.SetValue(dObj, 222, null);
            //获取方法的信息
            MethodInfo method = t.GetMethod("Print");
            method.Invoke(dObj,null);//执行方法 

通过上面那个方法,我们已经可以给类的字段属性赋值,也可以通过反射来执行类的方法,执行的方法也可以传递参数数组。大家注意到上面我们获得的类型我们并不清楚什么类型,我们下面给他扩展一下,也就是公开接口,反射类中和示例中分别引用这一技口,反身类并且继承这一接口

public class Point:IPoint    //反射类实现接口

            string assemblyName = @"具体路径\Point.dll";
            string typeName = "aaa.Point";

            Assembly assembly = Assembly.LoadFrom(assemblyName);  //手动加载程序集
            Type type = assembly.GetType(typeName);           //获取程序集中的类型

            IPoint obj = (IPoint)Activator.CreateInstance(type);  //通过接口创建对象实例
            obj.X = 100;
            obj.Y = 200;
            obj.Print();  

总结:在一般的实践中,使用接口的方式更为方便,也能提高一定的效率。

时间: 2024-10-09 14:19:41

c#反射简单示例的相关文章

【java】反射简单示例

1 package 反射; 2 3 public class Test反射 { 4 public static void main(String[] args) { 5 System.out.println(Runtime.getRuntime().getClass());//class java.lang.Runtime 6 Test反射 t=new Test反射(); 7 System.out.println(t.getClass());//class 反射.Test反射 8 } 9 } g

AMQP消息队列之RabbitMQ简单示例

前面一篇文章讲了如何快速搭建一个ActiveMQ的示例程序,ActiveMQ是JMS的实现,那这篇文章就再看下另外一种消息队列AMQP的代表实现RabbitMQ的简单示例吧.在具体讲解之前,先通过一个图来概览下: 1.添加Maven依赖 <!-- rabbitmq begin --> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit

HMM的维特比算法简单示例

今天读了一位大牛的关于HMM的技术博客,读完之后,写了一个关于维特比算法的简单示例,用scala和java语言混合编写的.现在上传之. package com.txq.hmm import java.utilimport scala.collection._ /** * HMM维特比算法,根据显示状态链条估计隐式链条 * @param states 隐式states * @param observations 显式states * @param start_probability 初始概率向量

spring-servlet.xml简单示例

spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 1 <!-- springMVC简单配置 --> 2 <?xml version="1.0" encoding="UTF-8"?> 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://w

关于Ajax实现的简单示例

一.代码示例 关于Ajax的基本概念(包括XMLHttpRequest对象及其相关方法属性)移步这里(w3school中文版)学习了解. <!doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title>使用Ajax异步加载数据</title> <script type = "text/javasc

【转】bind简单示例

bind简单示例代码 namespace { class placeholder_ {}; placeholder_ __1; } template <typename R, typename T, typename Arg> class simple_bind_t { private: typedef R (T::*F)(Arg); F f_; T* t_; Arg& a_; public: simple_bind_t(F f, T* t, Arg &a) : f_(f),

SQL左连接、右连接和内连接的简单示例

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录: right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录: inner join(等值连接) 只返回两个表中联结字段相等的行:举例如下: -------------------------------------------- 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B记录

Backbone简单示例

要的资源: <script type="text/javascript" src="../dep/underscore-1.6.0.min.js"></script> <script type="text/javascript" src="../dep/jquery-1.11.1.min.js"></script> <script type="text/javas

动态网站开发技术学习2:VS 2010制作作第一个简单示例网站

制作一个简单示例网站的步骤: 一,启动VS 2010开发环境,选择菜单中的"文件",选择其中的"新建",再选择"网站",会弹出"新建网站"对话框. 二,在"新建网站"的对话框,在"已安装模板"中选择Visual C#,右侧的选择"ASP.NET网站"选项,单击"新建网 站"中的"文件系统",下拉菜单中有"文件系统&qu