• 反射小例


        /// <summary>
        /// 接口中首先定义方法名称
        /// </summary>
        public interface IPlugs
        {
            string Name { get; }
    
            string Process(string str);
        }
        /// <summary>
        /// 实现接口方法
        /// </summary>
        class ToLower:IPlgus.IPlugs
        {
            public string Name
            {
                get { return "大写转小写"; }
            }
    
            public string Process(string str)
            {
                return str.ToLower();
            }
        }

    然后生成DLL文件复制到主程序bin文件夹中

       using System.Reflection;
        /// <summary>
        /// 动态获取dll并且添加到主程序
        /// </summary>
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
                Type t=typeof(IPlgus.IPlugs);     //获取接口type
                string path = AppDomain.CurrentDomain.BaseDirectory;   //获取程序执行根目录
    
                path += "IPlugs\";
    
                string[] strs = System.IO.Directory.GetFiles(path, "*.dll");    //获取对应目录中dll的文件路径
    
                if(strs.Length>0)
                {
                    for (int i = 0; i < strs.Length; i++)
                    {
                        Assembly ass = Assembly.LoadFile(strs[i]);     //获取程序集
                        if(ass!=null)
                        {
                            Type[] types = ass.GetTypes();   //获取程序集中的Type
                            if(types.Length>0)
                            {
                                foreach (Type item in types)
                                {
                                    if(t.IsAssignableFrom(item))
                                    {
                                        ToolStripMenuItem tool = new ToolStripMenuItem();
    
                                        PropertyInfo pinfo = item.GetProperty("Name");   //获取Type中的属性
    
                                        object obj = Activator.CreateInstance(item);    //根据获取的Type实例化对象
                                        object value = pinfo.GetValue(obj);           //获取Type属性中的值
                                        tool.Text = value.ToString();
                                      //  tool.Click += tool_Click;
                                        tool.Click += new EventHandler(tool_Click);
                                        tool.Tag = item;
                                        this.功能ToolStripMenuItem.DropDownItems.Add(tool);
                                    }
                                }
                            }
                        }
                    }
                }
            }
    
            void tool_Click(object sender, EventArgs e)
            {
                string text = this.textBox1.Text.Trim();
                if(text=="")
                {
                    MessageBox.Show("没法转");
                }
                ToolStripMenuItem tool=sender as ToolStripMenuItem;
                Type t=(Type)tool.Tag;
                object model = Activator.CreateInstance(t);
                MethodInfo minfo=t.GetMethod("Process");    //获取Type中的方法
                object newtext = minfo.Invoke(model, new object[] { text });          //执行从Type中获取的方法
                this.textBox1.Text = newtext.ToString();
            }
        }
  • 相关阅读:
    汉诺塔略写
    第六章实验报告
    第三次实验报告
    第五章 循环结构反思
    第二次实验报告
    第一次实验报告x
    第九章 结构体与共用体
    第八次实验报告
    第7章 数组实验
    第六章 函数和宏定义实验(2)
  • 原文地址:https://www.cnblogs.com/ianism/p/4349412.html
Copyright © 2020-2023  润新知