1
我有一段代碼正在跨AppDomains傳遞一個對象並使調試更容易我想擺脫TransparentProxy。在編寫這個示例的過程中,我發現瞭如何去做,但是我有兩個非常相似的代碼片斷,它們的行爲有所不同,我不確定爲什麼。使用AppDomain時對TransparentProxy的查詢
我知道實際值是正確的,所以這只是爲了幫助調試。
在下面的例子中。我有一個類Data,它在默認域中初始化並傳遞給在另一個域中運行的Process。如果我嘗試使用靜態方法克隆數據結構,但使用實例方法,我不太明白原因。
任何人都可以解釋嗎?
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;
}
}
這是有道理的。謝謝 – sgmoore 2012-07-14 13:05:44