【问题标题】:Getting a property reference using reflection使用反射获取属性引用
【发布时间】:2014-01-02 02:40:14
【问题描述】:
var a = new obj();
var property = a.GetType().GetProperty("DB").GetValue(a,null) as testObject;

这是否意味着变量 property 持有对我在对象 a 中获得的相同对象的引用,或者创建了一个持有相同值的新 testObject?

如果这意味着创建一个新对象,那么我如何使用反射获取对该属性/支持字段的引用?

【问题讨论】:

    标签: c# reflection


    【解决方案1】:

    property 现在拥有对aDB 属性中的任何内容的引用

    我不确定当您在具有值类型的属性上调用 GetValue() 时会发生什么,我想您会得到对原始值的盒装副本的引用,如 Boxing and Unboxing (C# Programming Guide) 中所述:

    将值类型装箱[在GetValue() 的情况下为object] 会在堆上分配一个对象实例并将值复制到新对象中。

    【讨论】:

    • 我很困惑,因为函数名是GetValue
    【解决方案2】:

    变量property 持有对存储在属性DB 中的相同值的引用。

    GetValue(a,null) 返回类型是对象,因此使用 as 运算符可以简单地进行类型转换。

    【讨论】:

      【解决方案3】:

      这意味着你的对象a 的属性DB 的值强制转换为testType(你在PropertyInfo.GetValue 中传递了对对象a 的引用),所以只有一个对象a 和您的变量引用了它的 DB 属性。

      【讨论】:

        猜你喜欢
        • 2018-06-05
        • 2017-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        • 1970-01-01
        • 2010-10-01
        相关资源
        最近更新 更多