【问题标题】:Set auto-property's value via reflection通过反射设置自动属性的值
【发布时间】:2015-07-17 16:55:28
【问题描述】:

我已经看到了关于如何通过反射调用属性的私有设置器的各种线程。但是,没有设置器的自动属性呢?

public class Test
{
    public string Property { get; } = "";
}

是否可以使用反射设置这个只读属性的值?

  • PropertyInfo.SetMethod 返回 null
  • PropertyInfo.SetValue 失败

有什么想法吗?

【问题讨论】:

    标签: c# c#-6.0


    【解决方案1】:

    是否可以使用反射设置这个只读属性的值?

    没有。这些属性由只读字段支持。 没有二传手;在构造函数中执行的任何赋值都直接写入字段。

    如果你的设计让你想通过反射写入只读属性,你应该重新审视你的设计:)

    【讨论】:

    • @D.R.:你把苹果比作宇航员;p
    • 这只是private readonly string _<>kProperty = ""; public string Property { get { return _<>kProperty; }} 的语法糖。不确定当 setter 不存在时如何调用它。
    • @D.R.好吧,它没有。支持字段是编译器实现细节。
    • @D.R.:反射有很多用途,违反了良好的设计,例如只调用可访问的成员。您可以尝试找出哪个私有字段与哪个属性相关联,但我真的会尽量避免这样做。
    • @JonSkeet:虽然这当然是对的,但也有一些例子表明通过反射来规避预期的公共 API 并不是糟糕的设计。这并不能否定您的观点,即大多数情况下某些事情是可疑的。
    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多