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

时间: 2024-08-06 18:33:07

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

获取类的成员变量(ios)

获取类的成员变量(ios) unsigned int numIvars; Ivar *vars = class_copyIvarList(NSClassFromString(@"TestView"), &numIvars); NSString *key=nil; for(int i = 0; i < numIvars; i++) { Ivar thisIvar = vars[i]; key = [NSString stringWithUTF8String:ivar_get

一个类怎样引用另外一个类的成员变量或方法

通常常用的有:A类有个变量C,B类想调用C方法一:变量C是非静态的(static),那么在B类中创建一个A类的对象,用对象.变量名就可以了方法二:变量C是静态的(static),直接用类.变量名 详细的可以参考这个文库:http://wenku.baidu.com/link?url=tyAAmJNGxBnXLnGLDK5of8B23KOMltUXNIA3rpD6U23F460ot_y7GVfy51utrku2T6wyzUgjX5WodmY623D5PGDWY-wr3UCxzzfVpn5I0E3

通过class类获取类的成员变量和构造函数信息

java 反射获取设置私有成员变量的值

for (Object arg:args) { //处理applicationCode Class<?> argClass = arg.getClass(); Field applicationCode =null; try { applicationCode =argClass.getDeclaredField("applicationCode"); }catch (NoSuchFieldException e){ } JWTData jwtData = CurrentU

java反射获取类的所有成员变量(本类和基类)

我们知道在Java的反射机制中,最核心的一个类就是Class类. Class类中提供了两个常用的获取类的成员变量的方法. 方法1 getFields() /** * Returns an array containing {@code Field} objects reflecting all * the accessible public fields of the class or interface represented by * this {@code Class} object. *

【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法

. 一. 类定义 类定义需要实现两部分 : -- 接口部分 : 定义类的成员变量和方法, 方法是抽象的, 在头文件中定义; -- 实现部分 : 引入接口部分的头文件, 实现抽象方法; 1. 接口部分定义 (1) 接口部分定义格式 接口部分定义格式 : @interface className : superClassName { type _variableName; ... ... } - (type) methodName : type parameterName; @end -- 接口定义

通过反射获取类的类名,方法和内部成员变量

package cn.lonecloud.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import org.junit.Test; public class ClassUtil { /** * 获取该类的信息 * 比如他的类的类名和函数 * @param obj */ public static void getCla

类的成员变量和属性描述

0x 01 .类的属性 property 类的属性即是通过@property声明的属性.属性是类型为objc_property的一个结构体.该结构体封装了属性的信息 比如属性的名字,属性的类型,属性的可读写,非原子/原子属性等. 1).获取一个类的属性列表方法:OBJC_EXPORT objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)入参是一个类的class对象,一个是用于统计属性数量的整形数的地址

通过Java反射测试类私有成员

在Java开发阶段,因为追求架构规范和遵循设计原则,所以要用private和protected修饰符去定义类的成员方法.变量.常量,这使得代码具封装性.内聚性等,但在测试阶段会造成一定的不便.通过Java的反射机制,便能很好地解决该问题. ReflectUtil.java //...... /** * @author yumin * @since 2015-03-02 14:52 */ public class ReflectUtil { private ReflectUtil() { } //