0

いくつかのグローバル プリミティブ プロパティ (インデックスなど) を持つ 1 つの BaseObject から継承する一連のオブジェクトがあります。現在、2 つのオブジェクトがあり、そのうちの 1 つ (ターゲット 1) には基本プロパティのみの値があり、もう 1 つ (オブジェクトのセットの 1 つであるソース) には他のすべてのプロパティの値があります (3 番目から取得)。パーティー アプリ) が、ベースのアプリです。

ソース オブジェクトのすべてのプロパティをターゲット オブジェクトにコピーしようとしていますが、ターゲットの基本プロパティの値は保持しています。つまり、何も削除せずに 2 つのオブジェクトのプロパティの値を等しくしようとしています… target = source; ターゲットのベース インデックスを削除するだけです。そのため、次のように、2 つのオブジェクト (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;

refによってcopy()メソッドに送信されるため、sourceObjが更新される理由を誰かが説明できますが、ターゲットobjはvalによって送信されたように動作し、その更新はすべてメソッドの外で無視されます...???

メソッド署名などで「ref」、「out」キーワードを使用する必要がありますか??

4

1 に答える 1