c# - 原始类型的透明代理

标签 c# marshalbyrefobject context-bound

我有一个 {System.Runtime.Remoting.Proxies.__TransparentProxy} 类型的运行时对象,它是从继承自 ContextBoundObject 的类实例创建的。此类向其他对象引发事件,我需要将此代理对象转换为原始对象。所有对象都在单个系统上的默认 AppDomain 中。

public abstract class ObjectBase : ContextBoundObject, IObjectBase
{
}

public IMessageSink GetObjectSink(MarshalByRefObject o, IMessageSink next)
        {
            _context = (ObjectBase)o;// as ObjectBase; does not give any error but type remains 
/// transparent proxy in VS watch window.
// no property to get the  underlying type of the proxy
             return _aspect;
        }

如何将它们转换成原始对象?如果在同一内存上运行,为什么会创建代理

最佳答案

您可以通过调用 MarshalServices.GetRealProxy() 获取透明代理的 RealProxy 实例, 但获取服务器对象引用会更难,因为默认的 RealProxy 只有非公共(public)成员公开此引用( protected 方法 GetUnwrappedServer() 和内部属性 UnwrappedServerObject) .如果 RealProxy 是您自己实现的,或者通过反射实现的(如果您有足够的信任来执行此操作),您可以访问这些。

关于c# - 原始类型的透明代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7059936/

相关文章:

c# - 将 EST 转换为 IST 在 C# 中给出错误

c# - 听wav文件C#

c# - In 和 Out 属性在 .NET 中如何工作?

xml - JAXB 能否首先通过包含进行编码,然后通过@XmlIDREF 进行编码以供后续引用?

scala - 访问具有更高种类类型的上下文边界的类型构造函数参数

c# - 灵活的文本解析策略

c# - 为任务创建 lambda 表达式<string>

c# - 简单跨应用程序对象中的内存泄漏

scala - 如何将宏注释应用于具有上下文绑定(bind)的案例类?

scala - Scala "context bound"与普通参数相比有什么优势?