让我们说下面的代码示例:
public class A
{
public virtual string Text { get; set; }
}
我生成A
的代理:
A aProxy = ... // Code to generate the whole proxy
aProxy.Text = "hello world";
现在我投射aProxy
来获得目标:
IProxyTargetAccessor accessor = (IProxyTargetAccessor)aProxy;
A target = (A)aProxy.DynProxyGetTarget();
我在Text
上设置target
:
target.Text = "bye!";
我无法弄清楚aProxy
为什么设置整个属性。它们应该是不同的对象实例,因为一个是包装整个目标的代理,另一个是目标本身。
bool equal = target.Text == aProxy.Text; // TRUE: What's going on?
bool referenceEqual = ReferenceEquals(target, aProxy); // FALSE