MarshalByRefObject.MemberwiseClone(Boolean) 方法

定义

创建当前 MarshalByRefObject 对象的浅表副本。

C#
protected MarshalByRefObject MemberwiseClone(bool cloneIdentity);

参数

cloneIdentity
Boolean

如果要删除当前 MarshalByRefObject 对象的标识,则为 false,这使该对象在跨远程边界封送时分配一个新标识。 值 false 通常比较合适。 如果为 true,则将当前 MarshalByRefObject 对象的标识复制到它的克隆项,这会将远程客户端调用路由到远程服务器对象。

返回

当前 MarshalByRefObject 对象的浅表副本。

注解

方法 MemberwiseClone(Boolean) 通过创建一个新 MarshalByRefObject 对象,然后将当前 MarshalByRefObject 对象的非静态字段复制到新对象来创建浅表副本。 如果字段是值类型,则执行字段的逐位复制。 如果字段是引用类型,则复制引用,但引用的对象不是;因此,原始对象及其克隆引用同一对象。

例如,假设有一个名为 MarshalByRefObject X 的对象,该对象引用对象 A 和 B。而对象 B 则引用对象 C。X 的浅表副本创建也引用对象 A 和 B 的新对象 X2。相比之下,X 的深层副本会创建一个新的对象 X2,该对象引用新对象 A2 和 B2,这些对象是 A 和 B 的副本。B2 又引用新的对象 C2,它是一个副本 C。使用实现 ICloneable 接口的类来执行对象的深层或浅表复制。

对象的标识 MarshalByRefObject 定义为远程服务器对象,该对象是远程处理客户端调用的目标。 默认情况下,对象的成员克隆 MarshalByRefObject 与原始对象具有相同的标识,这通常不是通过远程处理边界封送到客户端的服务器端对象的克隆的正确行为。 指定 false(通常很合适)以删除克隆的标识,并在克隆跨远程处理边界封送时分配新标识,或 true 使克隆保留原始 MarshalByRefObject 对象的标识。 方法 MemberwiseClone(Boolean) 旨在供实现远程服务器对象的开发人员使用。

适用于

产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1