Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的对象从另一个应用程序域序列化时只销毁一次?_C# - Fatal编程技术网

C# 为什么我的对象从另一个应用程序域序列化时只销毁一次?

C# 为什么我的对象从另一个应用程序域序列化时只销毁一次?,c#,C#,考虑这一点: [Serializable] class B { public B() { Console.WriteLine("Creating B in " + AppDomain.CurrentDomain.FriendlyName); } ~B() { Console.WriteLine("Finalizing B in " + AppDomain.CurrentDomain.FriendlyName); } } class C : MarshalByRefObject

考虑这一点:

[Serializable]
class B
{
    public B() { Console.WriteLine("Creating B in " + AppDomain.CurrentDomain.FriendlyName); }
    ~B() { Console.WriteLine("Finalizing B in " + AppDomain.CurrentDomain.FriendlyName); }
}

class C : MarshalByRefObject
{
    public C() { Console.WriteLine("Creating C in " + AppDomain.CurrentDomain.FriendlyName); }
    ~C() { Console.WriteLine("Finalizing C in " + AppDomain.CurrentDomain.FriendlyName); }
}


class Program
{
    static void Main(string[] args)
    {
        AppDomain appDomain = AppDomain.CreateDomain("myAppDomain");
        B b = (B)appDomain.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, typeof(B).FullName);
        C c = (C)appDomain.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, typeof(C).FullName);
        AppDomain.Unload(appDomain);
        GC.Collect();
    }
}
我得到的结果是:

Creating B in myAppDomain
Creating C in myAppDomain
Finalizing C in myAppDomain
Finalizing B in myAppDomain

然而,我希望
B
将被最终确定两次(每个应用程序域一次),因为它正在被序列化。我缺少什么?

尝试在GC之前移动代码。在另一个方法中收集(因此变量范围甚至在调试中结束),然后添加GC.WaitForPendingFinalizers()或add
b=null在GC.Collect之前-应该具有相同的效果。或者在发布模式下进行测试。