C# 反射

1. 获取方法以及动态调用方法

GetType()
获取当前实例的 System.Type

返回结果:
当前实例的准确运行时类型


GetFields()
返回当前 System.Type 的所有公共字段

返回结果:
表示为当前 System.Reflection.FieldInfo 定义的所有公共字段的 System.Type 对象数组。
如果没有定义的公共字段,则为 System.Type 类型的空数组。


GetProperty(string name)
搜索具有指定名称的公共属性

参数:
name:包含要获取的公共属性名的字符串

返回结果:
表示具有指定名称的公共属性的对象(如果找到的话);否则为 null


GetValue(object obj, object[] index)
用索引化属性的可选索引值返回指定对象的该属性值

obj:将返回其属性值的对象
index:索引化属性的可选索引值。 索引化属性的索引从零开始。 对于非索引化属性,该值应为 null

返回结果:
指定对象的属性值


SetValue(object obj, object value, object[] index)
用索引化属性的可选索引值设置指定对象的该属性值

参数:
obj:将设置其属性值的对象
value:新的属性值
index:索引化属性的可选索引值。 对于非索引化属性,该值应为 null


GetGetMethod();
返回此属性的公共 get 访问器。

返回结果:
MethodInfo 对象,表示此属性的公共 get 访问器;如果 null 访问器是非公共的或不存在,则为 get

需要实例化的类

namespace ConsoleTest
{
    public class TestClass
    {
        private string _value;
        public TestClass()
        {
        }
        public TestClass(string value)
        {
            _value = value;
        }
        public string GetValue(string name)
        {
            if (_value == null)
                return "NULL";
            else
                return name + "  :  " + _value;
        }
        public string Value
        {
            set
            {
                _value = value;
            }
            get
            {
                if (_value == null)
                    return "NULL";
                else
                    return _value;
            }
        }
    }
}

TestClass 包含一个有参数的构造函数,一个GetValue的方法,一个Value属性,我们可以通过方法的名称来得到方法并且调用,代码如下:

class program
{
    static void Main(string[] args)
    {
        //获取类型信息
        Type t = Type.GetType("ConsoleTest.TestClass");
        //构造器的参数
        object[] constuctParms = new object[] { "timmy" };
        //根据类型创建对象
        object dObj = Activator.CreateInstance(t, constuctParms);
        //获取方法的信息
        MethodInfo method = t.GetMethod("GetValue");
        //调用方法的一些标志位,这里的含义是Public并且是实例方法,这也是默认的值
        BindingFlags flag = BindingFlags.Public | BindingFlags.Instance;
        //GetValue方法的参数
        object[] parameters = new object[] { "Hello" };
        //调用方法,用一个object接收返回值
        object returnValue = method.Invoke(dObj, flag, Type.DefaultBinder, parameters, null);
 
        Console.ReadKey();
    }
}

2. 动态获取类的属性值

MyClass myClass = new MyClass();
string feildName = "name";
myClass.GetType().GetProperty(feildName).GetValue(myClass, null).ToString();

//动态赋值同理
myClass.GetType().GetProperty(feildName).SetValue(myClass, value, null);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值