码迷,mamicode.com
首页 > Windows程序 > 详细

c#反射简单示例

时间:2015-01-05 14:39:28      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

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

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

    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();  

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

 

c#反射简单示例

标签:

原文地址:http://www.cnblogs.com/sky2014/p/4203392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!