我有一个在.NET框架程序集中定义的类:
public class ExternalClass
{
internal double DesiredProperty => 1.0;
}
我从ExternalClass派生,希望重写或以某种方式拦截对该属性的调用。我知道这会变得很糟糕,但这只是一个概念证明。
我试着用直截了当的方式思考,但没有任何运气:
private void DoEvilStuff()
{
var prop = typeof(ExternalClass).GetProperty("DesiredProperty", BindingFlags.Instance | BindingFlags.NonPublic);
// Exception: Property has no setter
prop.SetValue(this, 5);
}
从
another answer:
private void DoEvilStuff()
{
var prop = typeof(ExternalClass).GetField("<DesiredProperty>k__BackingField", BindingFlags.Instance | BindingFlags.NonPublic);
// fails, prop is null:
prop.SetValue(this, 5);
}
有没有一种方法可以通过反射来做到这一点,或者用合理的小努力来实现这一点?我可以(适当地)为我的实际问题解决这个问题,所以“不”是一个可以接受的答案,但我很好奇这是否可能。