C# 按出血/参考/值封送?

C# 按出血/参考/值封送?,c#,serialization,C#,Serialization,我听说过引用封送、出血封送和值封送。这三者之间到底有什么区别?我知道,在跨appdomains/serialization传输数据时会使用这些方法,但仅此而已。不同形式的封送处理用于描述对象通过正常函数调用在AppDomain实例之间传递时的行为。AppDomain通常被称为轻量级进程,它为托管对象提供了一个独立的容器来运行。下面是不同类型的快速细分 引用封送 从MarshallByRefObject派生的所有类型都将通过引用封送。这些对象实例不会在AppDomain实例之间移动。它们被分配到特

我听说过引用封送、出血封送和值封送。这三者之间到底有什么区别?我知道,在跨appdomains/serialization传输数据时会使用这些方法,但仅此而已。

不同形式的封送处理用于描述对象通过正常函数调用在
AppDomain
实例之间传递时的行为。
AppDomain
通常被称为轻量级进程,它为托管对象提供了一个独立的容器来运行。下面是不同类型的快速细分

引用封送 从
MarshallByRefObject
派生的所有类型都将通过引用封送。这些对象实例不会在
AppDomain
实例之间移动。它们被分配到特定的
AppDomain
,并且不会离开它

当通过
AppDomain
边界传递对
MarshallByRefObject
的引用时,将在目标
AppDomain
中创建代理。此代理可用于操作原始
AppDomain
中的对象,但对象本身无法直接访问

按值封送 本质上与
MarshallByRefObject
相反。当这些值跨
AppDomain
边界传递时,它们将通过二进制序列化进行序列化,并在目标
AppDomain
实例中进行反序列化。结果可能是两个独立的值。每个域中有一个

以流血方式执法 某些类型的类称为域中立型。特别是
字符串
类型
和其他反射成员。这些对象不存在于特定的
AppDomain
中,对它们的引用可以在它们之间自由共享。它们类似于引用封送,因为不会创建重复项,但也不会创建代理。相反,直接引用在
AppDomain
实例之间共享

你应该看看乔·达菲关于这个主题的博客