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

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

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

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

 

代码:

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# 使用反射获取类的成员变量名、方法及属性的若干笔记