• 反射


    反射提供了描述程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。  如果代码中使用了特性,可以利用反射来访问它们。

    具体可以参照微软的官方解释:http://msdn.microsoft.com/zh-cn/library/ms173183.aspx

    下面介绍一个常用例子

    int i = 42;
    System.Type type = i.GetType();
    System.Console.WriteLine(type);
    

     上面就是一个是使用静态方法 GetType(从 Object 基类派生的所有类型都继承该方法)获取变量类型的简单反射示例

    下面就通过一个复杂的例子来说明

    需求:新人入职,要求介绍,例如:我是小明中国人。我是tom英国人。。

    分析:中国人、美国人、英国人首先抽象一个person人。利用反射机制代码如下:

    抽象类代码

        public abstract class Person
        {
            private string name="";
    
            public Person(string name)
            {
                this.name = name;
            }
    
            public string Speak()
            {
                return "我的名字是" + name + GetCountry();
            }
    
            public abstract string GetCountry();
        }

    英国人、美国人、中国人代码

        public class Chinese : Person
        {
            public Chinese(string name)
                : base(name)
            {
            }
    
            public override string GetCountry()
            {
                return "中国人";
            }
        }
        public class EngLish : Person
        {
            public EngLish(string name)
                : base(name)
            {
    
            }
    
            public override string GetCountry()
            {
                return "英国人";
            }
        }
        public class AmeriCan : Person
        {
            public AmeriCan(string name)
                : base(name)
            {
     
            }
    
            public override string GetCountry()
            {
                return "美国人";
            }
        }

    反射工厂代码

        public class PersonFactory
        {
            public static Person CreatPerson(string animalCategory, string name)
            {
                Person per = null;
                object[] obj = new object[1];
                obj[0] = name;
                per = (Person)Assembly.Load("PersonLibrary").CreateInstance("PersonLibrary." + animalCategory, false, BindingFlags.CreateInstance, null, obj, null, null);
                return per;
            }
        }

    客户端代码

            private void btnEnglish_Click(object sender, EventArgs e)
            {
                //Person eng = new EngLish("Tom");
    
                Person eng = PersonFactory.CreatPerson("EngLish", "Tom");
                textBox1.Text = eng.Speak();
            }
  • 相关阅读:
    镜像转换:img转换为iso
    IDM的谷歌插件安装
    Adams和UG许可证冲突问题
    步进电机驱动总结
    比赛官网收集
    树莓派安装pip包管理工具
    光固化打印后处理过程
    Arduino 串口库函数
    六足蜘蛛机器人行走控制
    温湿度传感器DHT11程序示例
  • 原文地址:https://www.cnblogs.com/tuqun/p/3758797.html
Copyright © 2020-2023  润新知