| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 413 人关注过本帖
标题:反射出程序集的属性, 方法及事件.
收藏  订阅  推荐  打印 
ioriliao
Rank: 12Rank: 12Rank: 12
来自:广东
等级:贵宾
威望:29
帖子:2122
积分:23963
注册:2006-11-30
反射出程序集的属性, 方法及事件.


程序代码:
using System.Windows.Forms;
using System.Reflection;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void toolStripTextBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                //已知程序集的文件名或路径,加载程序集。
                Assembly assembly = Assembly.LoadFrom(toolStripTextBox1.Text);
                TreeNode tn = new TreeNode();
                treeView1.Nodes.Clear();
                //遍历程序集所有的类
                foreach (System.Type t in assembly.GetTypes())
                {
                    tn = new TreeNode(t.Name, 1, 1);
                    TreeNode property = new TreeNode("属性", 0, 0);
                    tn.Nodes.Add(property);
                    //遍历每个类的属性
                    foreach (PropertyInfo p in t.GetProperties())
                    {
                        TreeNode pn = new TreeNode(p.Name, 0, 0);
                        property.Nodes.Add(pn);
                    }
                    TreeNode method = new TreeNode("方法", 2, 2);
                    tn.Nodes.Add(method);
                    //遍历每个类的方法
                    foreach (MethodInfo m in t.GetMethods())
                    {
                        string s = "";
                        //遍历某个方法的参数
                        foreach (ParameterInfo par in m.GetParameters())
                        {
                            s += string.Format("{0} {1},", par.ParameterType.Name, par.Name);
                        }
                        if (s.Length > 0)
                            s = s.Substring(0, s.Length - 1);
                        s = m.ReturnType.Name + " " + m.Name + "(" + s + ")";
                        TreeNode mn = new TreeNode(s, 2, 2);
                        method.Nodes.Add(mn);
                    }
                    TreeNode even = new TreeNode("事件", 3, 3);
                    tn.Nodes.Add(even);
                    //遍历每个类的事件
                    foreach (EventInfo ei in t.GetEvents())
                    {
                        string s = ("event " + ei.EventHandlerType.Name + " " + ei.Name);
                        TreeNode en = new TreeNode(s, 3, 3);
                        even.Nodes.Add(en);
                    }
                    treeView1.Nodes.Add(tn);
                }
            }


        }
    }
}
运行效果:

源码:
附件: 只有本站会员才能下载或查看附件,请您 登录注册
搜索更多相关主题的帖子: 反射  属性  
2008-8-20 16:15
smoon
Rank: 2
等级:ID已被封
帖子:461
积分:4836
注册:2006-4-29

好东西啊,顶你,建议加精啊!

QQ:860660016
网站:http://hackcoder.cn
承接各种C#项目中。。。。。
2008-8-21 09:35
seiya027848
Rank: 2
等级:注册会员
帖子:50
积分:752
注册:2008-6-27

非常好的例子
2008-8-21 09:43
ioriliao
Rank: 12Rank: 12Rank: 12
来自:广东
等级:贵宾
威望:29
帖子:2122
积分:23963
注册:2006-11-30

有时间加我Q交流下.82530662

105本高清PDF电子书 :http://www.cnblogs.com/ioriliao/archive/2008/10/20/1315343.html
VB爱好者1号群:31556786
2008-8-22 12:50
ioriliao
Rank: 12Rank: 12Rank: 12
来自:广东
等级:贵宾
威望:29
帖子:2122
积分:23963
注册:2006-11-30

建议版主把我这贴加精.

105本高清PDF电子书 :http://www.cnblogs.com/ioriliao/archive/2008/10/20/1315343.html
VB爱好者1号群:31556786
2008-11-4 13:44
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.075612 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved