首页 > 代码库 > 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); } }}
相关内容:
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# 使用反射获取类的成员变量名、方法及属性的若干笔记