“消息赋值”形状中的消息引用

首次分配 时。基于 NET 的对象指向消息或消息部分,该消息保存并维护对 对象的引用。

为了提高效率和可伸缩性,业务流程引擎不会对对象执行“深层复制”:也就是说,它不会将对象的全部内容复制到消息中。

如果随后将该对象分配给另一个消息或消息部分,则对原始的任何修改都会导致对第二个消息或消息部分进行修改。 应避免这种做法,因为结果不可预知。

如果需要第二条消息具有对象的不同副本,则应将第一个消息或消息部分分配给第二个消息或消息部分。

请考虑以下示例:

错误的方式:

myMsg1 = myObj; // assign the first message  
myMsg2 = myObj; // assign the second message (wrong!)  
myMsg2.myInt = 100; // modify the second  
myMsg1.myInt = 5;  

在本例中,myMsg2.myInt 已被覆盖,现在具有值 5。

正确方式:

myMsg1 = myObj; // assign the first message  
myMsg2 = myMsg1; // assign the second message (right!)  
myMsg2.myInt = 100; // modify the second  
myMsg1.myInt = 5;  

在这种情况下,myMsg2.myInt 的值仍为预期值 100。

另请参阅

构造消息