• 反射复习(Reflection)


    C#的反射是一个比较基础的知识,尤其是在2.0以及后续的版本上,反射的应用更是常见,也成为了许多其他技术/思想的实现基础,尤其是在设计模式中,像策略模式,工厂模式等。下面是一个非常简单的反射例子。

    首先定义一个 Person 类

    namespace Reflection {
        class Person {
            public string Name { get; set; }
            public int Age { get; set; }
            public Sex sex { get; set; }
            public Person(string name,int age,Sex s) {
                Name = name;
                Age = age;
                sex = s;
            }
            public void SayHello() {
                Console.WriteLine("Hello, I am {0}",Name);
                Console.ReadKey();
            }
        }
        enum Sex {
            male,
            female
        }
    }

    然后要动态的创建这个Person类的实例,注意,这次我们并不是 new ,而是通过反射来创建这个 Person 类的实例。

    创建这个实例这可以用下面这句,因为Person的构造是必须传入参数的,所以要传递初始值。

    Type t = typeof(Person);

    Object obj = Activator.CreateInstance(t, new Object[] { "Jerry", 30, Sex.male });

    这样就创建了一个 Person 类的实例。

    下一步可以动态的来修改 Name 属性的值:

    PropertyInfo p_name = obj.GetType().GetProperty("Name");
    if (p_name != null && p_name.CanRead) {
        p_name.SetValue(obj, "Jonathan", null);
    }

    最后,可以调用创建实例的方法:

    MethodInfo m = obj.GetType().GetMethod("SayHello");
    m.Invoke(obj,null);

    完整代码如下:

    namespace Reflection {
        class Program {
            static void Main(string[] args) {
                Type t = typeof(Person);
                Object obj = Activator.CreateInstance(t, new Object[] { "Jerry", 30, Sex.male });
                PropertyInfo p_name = obj.GetType().GetProperty("Name");
                if (p_name != null && p_name.CanRead) {
                    p_name.SetValue(obj, "Jonathan", null);
                }
                MethodInfo m = obj.GetType().GetMethod("SayHello");
                m.Invoke(obj,null);
            }
        }
    }

    这里只是简单的复习了一下反射的基础知识。

  • 相关阅读:
    【centos6.5 安装 node.js + npm】
    【钉钉PC】PC端钉钉清除缓存
    【laravel5.4】中jquery的post Ajax提交
    python 设计模式之中介者模式
    python 设计模式之备忘录模式
    python 设计模式之观察者模式
    python 设计模式之策略模式
    23种设计模式有哪些,不带定义,不带例子
    python 设计模式之模板方法模式
    python 设计模式之访问者模式
  • 原文地址:https://www.cnblogs.com/codehunter008/p/1431556.html
Copyright © 2020-2023  润新知