我有一组从一个 BaseObject 继承的对象,这些对象具有一些全局原始属性(索引等)。现在,我有两个对象,其中一个(目标对象)仅具有基本属性的值,另一个(源,它是一组对象之一)具有所有其他属性的值(从第三个派对应用程序),但基本的。
我正在尝试将所有源对象的属性复制到目标对象,但保留目标的基本属性值。换句话说——我试图在不删除任何内容的情况下使两个对象的属性值相等…… target = source; 只会删除目标的基本索引...所以,我创建了一个方法,它将两个对象(转换为 BaseObject)作为参数,并在复制之前将目标的索引值复制到源,如下所示:
Public void Copy(BaseObject source, BaseObject target)
{
//Copy all primitive indexes here...
source.index = target.index;
source.reference = target.reference;
etc…
//Copy the updated object to the target one...
target = source;
}
在方法内部的调试模式下似乎没问题,但是 - 当我的代码从方法中退出时,我惊讶地发现虽然源对象已正确更新了继承和非继承属性,但目标值保持不变. 因此,我不得不在方法之外再次将(更新的)源复制到目标中,如下所示:
InheritedObject sourceObj = CreateObjectWithPrimitiveIndexes();
InheritedObject targetObj = GetObjectWithNoIndexesFrom3rdParty();
targetObj.Copy(source: sourceObj, target: targetObj);
//The targetObject is not updated, so I have to re-copy it outside the Copy() method
targetObj = sourceObj;
有人可以解释一下为什么 sourceObj 会被更新,因为它是由 ref 发送到 copy() 方法的,但是目标 obj 的行为就像它是由 val 发送的,并且它的所有更新都在方法之外被忽略了……???
我应该在方法签名等中使用“ref”、“out”关键字吗?