【发布时间】:2018-02-07 21:04:59
【问题描述】:
我需要修改一个只有“get”选项的属性值。我发现了一些使用 GetField 的技巧,但我没有成功。
见下方代码:
namespace ConsoleApplication1
{
abstract class Test
{
private int testValue;
protected int TestValue {
get { return testValue; }
}
}
class Myclass : Test
{
public Myclass(): base(){}
}
class Program
{
static void Main(string[] args)
{
Myclass test = new Myclass();
var field = typeof(Myclass).GetField("<TestValue>k__BackingField", BindingFlags.NonPublic | BindingFlags.Instance);
field.SetValue(test, 3);
}
}
}
实际上,我想将“TestValue”设置为 3,但它不起作用。我可能做错了什么。
【问题讨论】:
-
显而易见的问题是...为什么?是的,你可能会得到字段(检查绑定标志和确切名称),但这是一个讨厌的实现细节,可能会随着下一次构建而改变!您拥有该代码吗?将 setter 公开。你没有那个代码?发布一个问题,询问如何规避这个问题(当然还有一个相关的例子)。顺便说一句,这是假设代码的问题...在您的示例中,它是
testValue而不是<TestValue>k_BackingField -
你不能为原型添加一个setter然后删除它吗?
-
“它不工作” - 阅读 How to Ask 并解释它到底是如何不工作的以及你试图让它工作的原因。
-
@SpacemanSpiff 不,这根本不是这里要问的。
标签: c#