首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AppDomain时对TransparentProxy的查询

使用AppDomain时对TransparentProxy的查询
EN

Stack Overflow用户
提问于 2012-07-14 19:57:04
回答 1查看 635关注 0票数 1

我有一段代码,它通过AppDomains传递一个对象,为了使调试更容易,我想去掉TransparentProxy。

在写这个示例的过程中,我发现了如何做到这一点,但我有两个非常相似的代码片段,它们的行为不同,我不确定为什么。

我知道实际值是正确的,所以这只是为了帮助调试。

在下面的示例中。我有一个类数据,它在默认域中初始化,并传递给在另一个域中运行的进程。如果我尝试使用static方法克隆数据结构,它可以工作,但是使用instance方法可以,我不太明白为什么。

有谁能解释一下吗?

代码语言:javascript
复制
using System;

class Program
{
    static void Main(string[] args)
    {
        AppDomain otherDomain = AppDomain.CreateDomain("Test");

        var otherType = typeof(Process);
        var process = otherDomain.CreateInstanceAndUnwrap(
                 otherType.Assembly.FullName, otherType.FullName) as Process;

        Data d = new Data() { Info = "Hello" };
        process.SetData(d);
    }
}

public class Process : MarshalByRefObject
{

    public void SetData(Data data)
    {
        Data data1 = Data.Clone(data);
        Data data2 = data.Clone();

        Console.WriteLine(data1.Info); 
           // Debugger shows data1.Info as Hello

        Console.WriteLine(data2.Info); 
           // Outputs Hello, but Debugger shows data2 as     
           // System.Runtime.Remoting.Proxies.__TransparentProxy
    }

}

public class Data : MarshalByRefObject
{
    public string Info { get; set; }

    public Data Clone()
    {
        return Data.Clone(this);
    }

    public static Data Clone(Data old)
    {
        var clone = new Data();
        clone.Info = old.Info;
        return clone;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-14 20:06:41

当您从另一个应用程序域调用静态方法时,将在该应用程序域中调用该方法,并在该应用程序域中创建新的Data对象。当您调用实例方法时,调用被编组到对象的原始应用程序域,因此克隆Data对象将在原始应用程序域中创建。然后,它作为透明代理被封送回另一个appdomain,并在那里显示为retern值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11483540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档