c# 反射简单用法例子

闲来无事,看了下反射的实现,写了个小例子。


新建一个类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace WfmReflection
{
    class MyClass
    {
        public string m;
        public void test() {

        }
        public int MyProperty { get; set; }
    }
}


建一个类库

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{
    public class MyTest
    {
        private string _name;
        private int _age;

        public string name
        {
            get{return _name;}
            set { _name = value; }
        }
        public int age
        {
            get { return _age; }
            set { _age = value; }
        }

        public MyTest(string name, int age)
        {
            _age = age;
            _name = name;
        }

        public string GetTestInfo()
        {
            return _name + ":" + _age.ToString();
        }
    }
}


winform实例:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;

namespace WfmReflection
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        //获取类型信息
        private void button1_Click(object sender, EventArgs e)
        {
            Type type = typeof(MyClass);

            string strInfo = "";
            strInfo = "类型名:" + type.Name;
            strInfo += "\n\t" + "类全名:" + type.FullName;
            strInfo += "\n\t" + "命名空间名:" + type.Namespace;
            strInfo += "\n\t" + "程序集名:" + type.Assembly;
            strInfo += "\n\t" + "模块名:" + type.Module;
            strInfo += "\n\t" + "基类名:" + type.BaseType;
            strInfo += "\n\t" + "是否类:" + type.IsClass;
            strInfo += "\n\t" + "类的公共成员:";
         
            MemberInfo[] memberInfos = type.GetMembers();//得到所有公共成员
            foreach (var item in memberInfos)
            {
                strInfo += "\n\t" + string.Format("{0}:{1}", item.MemberType, item);
           }
            richTextBox1.Text = strInfo;
        }

        //获取程序集信息
        private void button2_Click(object sender, EventArgs e)
        {
            string strInfo = "";
            //获取当前执行代码的程序集
            Assembly assem = Assembly.GetExecutingAssembly();
            strInfo += "\n\t" + "程序集全名:" + assem.FullName;         
            strInfo += "\n\t" +"程序集的版本:" + assem.GetName().Version;
            strInfo += "\n\t" +"程序集初始位置:" + assem.CodeBase;
            strInfo += "\n\t" +"程序集位置:" + assem.Location;
            strInfo += "\n\t" +"程序集入口:" + assem.EntryPoint;     
            Type[] types = assem.GetTypes();
            strInfo += "\n\t" +"程序集下包含的类型:";
            foreach (var item in types)
            {
                strInfo += "\n\t" +"类:" + item.Name;
            }
            richTextBox1.Text = strInfo;
        }

        //反射调用方法
        private void button3_Click(object sender, EventArgs e)
        {
            System.Reflection.Assembly ass = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + "bin\\Test.dll"); //加载DLL
            System.Type t = ass.GetType("Test.MyTest");//获得类型(命名空间中的类)

            object o = System.Activator.CreateInstance(t,new object[] { "xiaoming", 19 });
            
            System.Reflection.MethodInfo mi = t.GetMethod("GetTestInfo");//获得方法

            string result=(string) mi.Invoke(o,new object[]{});//调用方法
            richTextBox1.Text = result;
        }
    }
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值