当前位置:编程学习 > asp >>

.NET WinForm编程Q&A系列(二)——反射机制

背景
如何更好的认识反射机制,并如何更好的应用反射机制?
 
概念
1、反射就是动态发现类型信息的能力。
它帮助程序设计人员在程序运行时利用一些信息去动态地使用类型,这些信息在设计时是未知的,这种能力类型于后期绑定。反射还支持的更高级的行为,能在运行时动态创建新类型,并且对这些新类型的操作进行调用。
2、可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现 有对象中获取类型。
3、应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。
 
需求
1、以某个实例为原型,重新生成一个新的实例,并对某些值做调整
2、获取制定类的属性、方法,并调用其方法
 
实例
1、定义User类,属性大致包括:UserID、UserName、Age、Address、Remark等
[csharp]  
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace WinFormQandA  
{  
    public class User  
    {  
        public string UserID  
        {  
            get;  
            set;  
        }  
  
        public string UserName  
        {  
            get;  
            set;  
        }  
  
        public int Age  
        {  
            get;  
            set;  
        }  
  
        public string Address  
        {  
            get;  
            set;  
        }  
  
        public string Remark  
        {  
            get;  
            set;  
        }  
  
        /// <summary>  
        /// 用于测试方法调用  
        /// </summary>  
        /// <param name="p1"></param>  
        /// <param name="p2"></param>  
        /// <returns></returns>  
        public int Add(int p1, int p2)  
        {  
            return p1 + p2;  
        }  
  
    }  
}  
2、制定相关处理函数:
[csharp] 
/// <summary>  
        /// 获取属性  
        /// </summary>  
        /// <param name="sender"></param>  
        /// <param name="e"></param>  
        private void button1_Click(object sender, EventArgs e)  
        {  
            this.richTextBox1.Text = "";  
            Assembly assembly = Assembly.Load("WinFormQandA");  
            Type type = assembly.GetType("WinFormQandA.User");  
  
  
            PropertyInfo[] pro = type.GetProperties();  
            foreach (PropertyInfo p in pro)  
            {  
                this.richTextBox1.Text += p.Name;  
                this.richTextBox1.Text += "\n";  
            }  
        }  
          
        /// <summary>  
        /// 获取方法  
        /// </summary>  
        /// <param name="sender"></param>  
        /// <param name="e"></param>  
        private void button2_Click(object sender, EventArgs e)  
        {  
            this.richTextBox1.Text = "";  
            Assembly assembly = Assembly.Load("WinFormQandA");  
            Type type = assembly.GetType("WinFormQandA.User");  
  
            MethodInfo[] met = type.GetMethods();  
            foreach (MethodInfo m in met)  
            {  
                this.richTextBox1.Text += m.Name;  
                this.richTextBox1.Text += "\n";  
            }  
  
        }  
  
        /// <summary>  
        /// 调用方法  
        /// </summary>  
        /// <param name="sender"></param>  
        /// <param name="e"></param>  
        private void button3_Click(object sender, EventArgs e)  
        {  
            Assembly assembly = Assembly.Load("WinFormQandA");  
            Type type = assembly.GetType("WinFormQandA.User");  
  
            MethodInfo met = type.GetMethod("Add");  
            object obj = Activator.CreateInstance(type, null);  
            Object[] num = { 10, 23 };  
            this.richTextBox1.Text = met.Invoke(obj, num).ToString();  
        }  
3、
补充:Web开发 , ASP.Net ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,