| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1081 人关注过本帖, 1 人收藏
标题:与大家分享下反射技术
取消只看楼主 加入收藏
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
结帖率:78.95%
收藏(1)
 问题点数:0 回复次数:2 
与大家分享下反射技术
ReflectionTest.rar (38.5 KB)

程序代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
//和大家分享一下自己在工作中用到反射技术的一些简单应用
//此案例应用场景是这个样子的:
//在我的项目中有很多的DLL, 每个DLL都有一个Mark属性,是用
//来标识这个DLL作用的中文名称来的,因为我要知道这个DLL是作
//什么用的,那么就只有取得其Mark属性.
//此紧紧作为一个示例.....
//备注:我用到了c#2008的新特性,关键字var,若不明白,请msdn.
namespace ReflectionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入DLL文件的路径");
            var pathFile = Console.ReadLine();
            //载入程序集
            var myAssembly = Assembly.LoadFrom(@pathFile);
            //取得程序集myAssembly的所有类型
            var types = myAssembly.GetTypes();
            
            //遍历类型,以获得类开的属性
            foreach (var type in types)
            {
                //获得类型属性集
                var props = type.GetProperties();
                //实例化此类型
                var typeFlection = System.Activator.CreateInstance(type);

                foreach (var prop in props)
                {
                    //属性名称是否是"Mark"
                    if (prop.Name == "Mark")
                    {
                        //取得属性值
                        var obj = prop.GetValue(typeFlection, null);
                        var MarkValue = obj;
                        Console.WriteLine("Mark的值为:{0}", MarkValue);
                    }
                }
            }
            Console.ReadLine();
        }
    }
}




程序代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace cls1
{
    public class Class1
    {
        private string m1;
        public Class1()
        {
            m1 = "cls1.Class1";
        }
        public string Mark
        {
            get { return m1; }
        }
    }


    public class Class2
    {
        private string m1;
        public Class2()
        {
            m1 = "cls1.Class2";
        }
        public string Mark
        {
            get { return m1; }
        }
    }

    public class Class3
    {
        private string m1;
        public Class3()
        {
            m1 = "cls1.Class3";
        }
        public string Mark
        {
            get { return m1; }
        }
    }
}



程序代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace cls2
{
    public class Class1
    {
        private string m1;
        public Class1()
        {
            m1 = "cls2.Class1";
        }
        public string Mark
        {
            get { return m1; }
        }
    }


    public class Class2
    {
        private string m1;
        public Class2()
        {
            m1 = "cls2.Class2";
        }
        public string Mark
        {
            get { return m1; }
        }
    }

    public class Class3
    {
        private string m1;
        public Class3()
        {
            m1 = "cls2.Class3";
        }
        public string Mark
        {
            get { return m1; }
        }
    }
}


图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 反射 技术 分享 
2008-03-28 15:09
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
此般好东西没人出来研究下,郁闷...

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-06-20 13:39
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
来个深度点的https://bbs.bccn.net/thread-209878-1-1.html
不过是一个还不完善的实现,发上来等人来指教,可是等了很久没有发现有...郁闷...

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-06-20 16:21
快速回复:与大家分享下反射技术
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026965 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved