Luk*_*Feo 6 c# reflection properties automatic-properties
我已经看到了各种问题并回答了我们可以使用这样的反射来调用私有的setter:
但是我有一些代码,它有一个我需要设置的属性但不能因为没有setter,我不能添加一个setter,因为这不是我的代码.在这种情况下,有没有办法以某种方式使用反射设置值?
Aby*_*te0 19
我不建议在你的应用程序上这样做,但为了测试目的,它可能是有用的...
假设你有:
public class MyClass
{
public int MyNumber {get;}
}
Run Code Online (Sandbox Code Playgroud)
如果是出于测试目的,你可以这样做,我不建议你在你的运行时代码中使用它:
var field = typeof(MyClass).GetField("<MyNumber>k__BackingField", BindingFlags.Instance | BindingFlags.NonPublic);
field.SetValue(anIstanceOfMyClass, 3);
Run Code Online (Sandbox Code Playgroud)
你必须记住,属性只是一对方法的语法糖.一个方法(getter)返回属性类型的值,一个方法(setter)接受属性类型的值.
并不要求getter和setter实际获取或设置任何东西.他们只是方法,所以他们可以做任何事情.唯一的要求是getter返回一个值.从外面看,你无法确定是否有支持领域.每次调用时都可以计算getter.它可能基于其他属性.
所以,不,通常没有任何方法可以"设置"没有设置器的属性.
| 归档时间: |
|
| 查看次数: |
13070 次 |
| 最近记录: |