C# 按出血/参考/值封送?
我听说过引用封送、出血封送和值封送。这三者之间到底有什么区别?我知道,在跨appdomains/serialization传输数据时会使用这些方法,但仅此而已。不同形式的封送处理用于描述对象通过正常函数调用在C# 按出血/参考/值封送?,c#,serialization,C#,Serialization,我听说过引用封送、出血封送和值封送。这三者之间到底有什么区别?我知道,在跨appdomains/serialization传输数据时会使用这些方法,但仅此而已。不同形式的封送处理用于描述对象通过正常函数调用在AppDomain实例之间传递时的行为。AppDomain通常被称为轻量级进程,它为托管对象提供了一个独立的容器来运行。下面是不同类型的快速细分 引用封送 从MarshallByRefObject派生的所有类型都将通过引用封送。这些对象实例不会在AppDomain实例之间移动。它们被分配到特
AppDomain
实例之间传递时的行为。AppDomain
通常被称为轻量级进程,它为托管对象提供了一个独立的容器来运行。下面是不同类型的快速细分
引用封送
从MarshallByRefObject
派生的所有类型都将通过引用封送。这些对象实例不会在AppDomain
实例之间移动。它们被分配到特定的AppDomain
,并且不会离开它
当通过AppDomain
边界传递对MarshallByRefObject
的引用时,将在目标AppDomain
中创建代理。此代理可用于操作原始AppDomain
中的对象,但对象本身无法直接访问
按值封送
本质上与MarshallByRefObject
相反。当这些值跨AppDomain
边界传递时,它们将通过二进制序列化进行序列化,并在目标AppDomain
实例中进行反序列化。结果可能是两个独立的值。每个域中有一个
以流血方式执法
某些类型的类称为域中立型。特别是字符串
,类型
和其他反射成员。这些对象不存在于特定的AppDomain
中,对它们的引用可以在它们之间自由共享。它们类似于引用封送,因为不会创建重复项,但也不会创建代理。相反,直接引用在AppDomain
实例之间共享
你应该看看乔·达菲关于这个主题的博客