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

背景

如何更好的认识反射机制,并如何更好的应用反射机制?

概念

1、反射就是动态发现类型信息的能力。
它帮助程序设计人员在程序运行时利用一些信息去动态地使用类型,这些信息在设计时是未知的,这种能力类型于后期绑定。反射还支持的更高级的行为,能在运行时动态创建新类型,并且对这些新类型的操作进行调用。
2、 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现 有对象中获取类型。
3、应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。

需求

1、以某个实例为原型,重新生成一个新的实例,并对某些值做调整
2、获取制定类的属性、方法,并调用其方法

实例

1、定义User类,属性大致包括:UserID、UserName、Age、Address、Remark等
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、制定相关处理函数:
/// <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、实现效果




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值