码迷,mamicode.com
首页 > 其他好文 > 详细

C# 使用反射获取类的成员变量名、方法及属性的若干笔记

时间:2014-09-19 18:52:55      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   使用   ar   strong   

参考链接:http://blog.csdn.net/ccaakkee/article/details/2425950,作者:CSDN ccaakkee

       http://blog.csdn.net/jaydawson/article/details/5539438,作者:CSDN jaydawson

 

代码:

bubuko.com,布布扣
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;

namespace ConsoleApplication12
{
    class TestClass
    {
        private int a;
        private int aa;
        
        public int b;
        public int bb;
        
        protected int c;
        protected int cc;

        public TestClass()
        {
            a = 1;
            b = 2;
            c = 3;
        }

        public int A
        {
            get { return a; }
            set { a = value; } 
        }

        private int AA
        {
            get { return aa; }
            set { aa = value; } 
        }
        public void SetValue(int x,int y,int z)
        {
            a = x;
            b = y;
            c = z;
        }
        public void Dis()
        {
            Console.WriteLine("a:" + a + " b:" + b+" c:"+c);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Type type = typeof(TestClass);
            object obj = Activator.CreateInstance(type);
            
            if (obj == null)
                Console.WriteLine("object is null");
            else
            {
                Console.WriteLine("类名:" + obj.ToString());
                Console.WriteLine("类名:" + type.Name);
                Console.WriteLine("类全名:" + type.FullName);
            }

            FieldInfo[] field = null;
            // 获取public成员变量名
            Console.WriteLine("Public成员变量:");
            field = type.GetFields(BindingFlags.Instance | BindingFlags.Public);
            foreach (FieldInfo fi in field)
                Console.WriteLine(fi.Name);

            // 获取非公有成员变量名
            Console.WriteLine("非公有成员变量:");
            field = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
            foreach (FieldInfo fi in field)
                Console.WriteLine(fi.Name);

            // 获取成员变量类型及值
            string item = "a";
            FieldInfo fie = type.GetField(item, BindingFlags.Instance | BindingFlags.NonPublic);
            Console.WriteLine("{0}‘s type: "+fie.FieldType,item);
            Console.WriteLine("{0}‘s value: "+fie.GetValue(obj),item);
            TestClass test_class = new TestClass();
            Console.WriteLine("{0}‘s value: " + fie.GetValue(test_class),item);

            // 获取类的方法
            Console.WriteLine("\n类的方法名称:");
            MethodInfo[] mis = type.GetMethods();
            foreach (MethodInfo mi in mis)
                Console.WriteLine("Function‘name :" + mi.Name);

            // 获取类的属性
            Console.WriteLine("\n类的属性:");
            PropertyInfo[] pis = type.GetProperties();
            foreach (PropertyInfo pi in pis)
            {
                Console.WriteLine("该类型有属性名称:" + pi.Name);
                Console.WriteLine("属性的类型" + pi.PropertyType.Name);
                Console.WriteLine("是否可读" + pi.CanRead);
                Console.WriteLine("是否可写" + pi.CanWrite);
                Console.WriteLine("属性值:" + pi.GetValue(obj, null).ToString());
            }

            // 获取类的某个属性
            string pro_str = "A";
            PropertyInfo  pro_aa = type.GetProperty("A");
            Console.WriteLine("{0}:" + pro_aa.GetValue(obj, null).ToString(),pro_str);
        }
    }
}
View Code

相关内容:

1、获取类名:

Activator.CreateInstance()方法使用:

  MSDN上的说明:创建指定类型的实例。

  有两种用法:   

Activator.CreateInstance (Type)
Activator.CreateInstance (Type, Object[])

  两种方法区别仅为:创建无参数的构造方法和创建有参数的构造函数。

  需要注意的是,对于内部的类型,我们只要以下代码来获取类型: 

 Type.GetType("NameSpaceClassName");

   而对于外部引用的DLL,必须使用下述代码:

Type.GetType("NameSpaceClassName, AssemblyName");

Assembly类:

  表示一个程序集,它是一个可重用、无版本冲突并且可自我描述的公共语言运行时应用程序构造块。

  MSDN上的说明:http://msdn.microsoft.com/zh-cn/library/system.reflection.assembly(v=vs.110).aspx

2、获取成员变量类型及值:

BindingFlags 枚举:

  MSDN链接:http://msdn.microsoft.com/zh-cn/library/system.reflection.bindingflags(v=vs.110).aspx

3、获取类的方法:

MethodInfo:

  发现方法的属性并提供对方法元数据的访问。

  MSDN:http://msdn.microsoft.com/zh-cn/library/system.reflection.methodinfo(v=vs.110).aspx

4、获取类的属性:

PropertyInfo:

  发现属性 (Property) 的属性 (Attribute) 并提供对属性 (Property) 元数据的访问。

  MSDN:http://msdn.microsoft.com/zh-cn/library/system.reflection.propertyinfo(v=vs.110).aspx

 

C# 使用反射获取类的成员变量名、方法及属性的若干笔记

标签:style   blog   http   color   io   os   使用   ar   strong   

原文地址:http://www.cnblogs.com/vitah/p/3981858.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!