首页 > 代码库 > c#反射简单示例

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

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

 

c#反射简单示例