分享

反射(转)

 牛人的尾巴 2015-10-28

反射(转) - 2

(2010-05-05 15:46:32)
标签:

杂谈

分类: C#
窥一斑而知全豹,一个对象实例泄漏的密秘(这个比较爽)
通过一个对象实例,我们可以获得包含这个对象实例的类的Assembly,进而获得整个Assembly的信息.

 1反射(转) <wbr>- <wbr>2using System;
 2反射(转) <wbr>- <wbr>2using System.Reflection;
 3反射(转) <wbr>- <wbr>2namespace TestReflection
 4反射(转) <wbr>- <wbr>2{
 5反射(转) <wbr>- <wbr>2    class Program
 6反射(转) <wbr>- <wbr>2    {
 7反射(转) <wbr>- <wbr>2        public static void Main(string[] args)
 8反射(转) <wbr>- <wbr>2        {
 9反射(转) <wbr>- <wbr>2            object new AX();
10反射(转) <wbr>- <wbr>2            //获取对象所属的Assembly的所有类的基本信息
11反射(转) <wbr>- <wbr>2            new TestObjectType().TestObjectTypeNow(A);
12反射(转) <wbr>- <wbr>2        }
13反射(转) <wbr>- <wbr>2    }
14反射(转) <wbr>- <wbr>2
15反射(转) <wbr>- <wbr>2    class AX
16反射(转) <wbr>- <wbr>2    {
17反射(转) <wbr>- <wbr>2        internal int kkkkkkkk 0;
18反射(转) <wbr>- <wbr>2        public int ooooooooo;
19反射(转) <wbr>- <wbr>2        private int property;
20反射(转) <wbr>- <wbr>2
21反射(转) <wbr>- <wbr>2        public int Property
22反射(转) <wbr>- <wbr>2        {
23反射(转) <wbr>- <wbr>2            get return property; }
24反射(转) <wbr>- <wbr>2            set property value; }
25反射(转) <wbr>- <wbr>2        }
26反射(转) <wbr>- <wbr>2        public void A()
27反射(转) <wbr>- <wbr>2        {
28反射(转) <wbr>- <wbr>2            Console.WriteLine("AX's function!~");
29反射(转) <wbr>- <wbr>2        }
30反射(转) <wbr>- <wbr>2    }
31反射(转) <wbr>- <wbr>2
32反射(转) <wbr>- <wbr>2    class AXzhz
33反射(转) <wbr>- <wbr>2    {
34反射(转) <wbr>- <wbr>2    }
35反射(转) <wbr>- <wbr>2
36反射(转) <wbr>- <wbr>2    class TestObjectType
37反射(转) <wbr>- <wbr>2    {
38反射(转) <wbr>- <wbr>2        //构造函数的默认修饰为private
39反射(转) <wbr>- <wbr>2        internal void TestObjectTypeNow(object A)
40反射(转) <wbr>- <wbr>2        {
41反射(转) <wbr>- <wbr>2            Type tpA A.GetType();
42反射(转) <wbr>- <wbr>2            Assembly assembly tpA.Assembly;
43反射(转) <wbr>- <wbr>2            Type[] types assembly.GetTypes();
44反射(转) <wbr>- <wbr>2            foreach (Type type in types)
45反射(转) <wbr>- <wbr>2            {
46反射(转) <wbr>- <wbr>2                Console.WriteLine("【类名】"+type.FullName);
47反射(转) <wbr>- <wbr>2                //获取类型的结构信息
48反射(转) <wbr>- <wbr>2                ConstructorInfo[] myconstructors type.GetConstructors();
49反射(转) <wbr>- <wbr>2                Show(myconstructors);
50反射(转) <wbr>- <wbr>2                //获取类型的字段信息
51反射(转) <wbr>- <wbr>2                FieldInfo[] myfields type.GetFields();
52反射(转) <wbr>- <wbr>2                Show(myfields);
53反射(转) <wbr>- <wbr>2                //获取方法信息
54反射(转) <wbr>- <wbr>2                MethodInfo[] myMethodInfo type.GetMethods();
55反射(转) <wbr>- <wbr>2                Show(myMethodInfo);
56反射(转) <wbr>- <wbr>2                //获取属性信息
57反射(转) <wbr>- <wbr>2                PropertyInfo[] myproperties type.GetProperties();
58反射(转) <wbr>- <wbr>2                Show(myproperties);
59反射(转) <wbr>- <wbr>2                //获取事件信息,这个项目没有事件,所以注释掉了,
60反射(转) <wbr>- <wbr>2                //通过这种办法,还可以获得更多的type相关信息.
61反射(转) <wbr>- <wbr>2                //EventInfo[] Myevents type.GetEvents();
62反射(转) <wbr>- <wbr>2                 //Show(Myevents);
63反射(转) <wbr>- <wbr>2            }
64反射(转) <wbr>- <wbr>2            Console.ReadLine();
65反射(转) <wbr>- <wbr>2        }
66反射(转) <wbr>- <wbr>2        //显示数组的基本信息
67反射(转) <wbr>- <wbr>2        public void Show(object[] os)
68反射(转) <wbr>- <wbr>2        {
69反射(转) <wbr>- <wbr>2            foreach (object var in os)
70反射(转) <wbr>- <wbr>2            {
71反射(转) <wbr>- <wbr>2                Console.WriteLine(var.ToString());
72反射(转) <wbr>- <wbr>2            }
73反射(转) <wbr>- <wbr>2            Console.WriteLine("----------------------------------");
74反射(转) <wbr>- <wbr>2        }
75反射(转) <wbr>- <wbr>2    }
76反射(转) <wbr>- <wbr>2}

【注】通过测试,发现只能获得public类型的信息.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多