Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置自动属性';通过反射的s值_C#_C# 6.0 - Fatal编程技术网

C# 设置自动属性';通过反射的s值

C# 设置自动属性';通过反射的s值,c#,c#-6.0,C#,C# 6.0,我已经看过关于如何通过反射调用属性的私有setter的各种线程。但是,没有setter的自动属性呢 public class Test { public string Property { get; } = ""; } 是否可以使用反射设置此只读属性的值 PropertyInfo.SetMethod返回null PropertyInfo.SetValue失败 有什么想法吗 是否可以使用反射设置此只读属性的值 否。这些属性由只读字段支持。没有二传手;在构造函数中执行的任何赋值都直接写

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

public class Test
{
    public string Property { get; } = "";
}
是否可以使用反射设置此只读属性的值

  • PropertyInfo.SetMethod
    返回null
  • PropertyInfo.SetValue
    失败
有什么想法吗

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

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


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

@D.R.:你把苹果比作宇航员;pIt只是
private readonly string_kProperty=“”)的语法糖;公共字符串属性{get{return{kProperty;}}
。不确定当setter不存在时您希望如何调用它。@d.R.嗯,它不存在。支持字段是编译器实现的详细信息。@D.R.:反射有很多用途,它们不会违反良好的设计,例如只调用可访问的成员。您可以尝试找出哪个私有字段与哪个属性相关联,但我确实会尽量避免这样做。@JonSkeet:这当然是正确的,但也有一些例子表明,通过反射绕过预期的公共API并不是一种糟糕的设计。这并不会使你的观点无效,你的观点可能在大多数情况下是可疑的。