3

あるフィールドを別のフィールドに割り当てるとき、C# はデータをコピーするだけですか、それとも実際にリンクを作成しますか? この記事ではゲーム エンジンの構造の例を示します。そこのコーダーには、親を含むコンポーネントがあります。C# では、親のコピーが含まれているだけですか、それとも参照していますか?

コード例:

class World
{
    ...
    public void Update()
    {
        ...
        ent.OnAttach(this);
        ...
    }
    ...
}

class Entity
{
    ...
    public void OnAttach(World world)
    {
        world_ = world;
    }
    ...
}

Entity オブジェクトは、Artice のように、World オブジェクトにアクセスし、そのフィールドとメソッドにアクセスできますか? (または、コードを誤解しましたか?)

4

4 に答える 4

6

データ型は aではなく aWorldとして定義されているため、その型の変数を割り当てると、同じデータへの参照のみがコピーされます。classstruct

言い換えれば、メモリ内の同じオブジェクトを使用するworld.SomeProperty = somethingか、編集するかです。world_.someProperty = something

データ型を a に変更すると、structデータ構造全体がコピーされ、同じデータのコピーが 2 つ作成されます。

データをどのように定義したかに関係なく、データへの参照を取得すると、そのメソッドまたはプロパティにアクセスできます。つまり、エンティティ オブジェクトがワールド オブジェクトへの参照を取得すると、(プライベートでない限り) そのオブジェクトの任意のメソッドまたはプロパティにアクセスできます。

于 2010-01-16T21:37:58.660 に答える
4

種類によって異なりますWorld。参照型 (クラス) の場合、コピーされた参照は同じオブジェクトを指すため、新しい参照が指すオブジェクトを変更すると、元のオブジェクトに影響します (新しいオブジェクトは作成されません)。これは、投稿されたサンプルの場合です。フィールドは単に同じWorldオブジェクトを参照します。

型が値型の場合World、それは (その内容と共に) コピーされ、完全に異なる値になり、元の値には影響しません。

于 2010-01-16T21:37:29.497 に答える
3

Entity と World はクラス (つまり「参照型」) であるため、互いに参照するだけです。1 つが構造体 (つまり、「値の型」) である場合、enite がコピーされます。

于 2010-01-16T21:38:29.997 に答える
2

参照渡しと値渡しを確認する必要があります。World オブジェクトは参照渡しであるため、このオブジェクトに含まれるデータが存在するメモリ内の場所への参照を渡しています。

エンティティは、World オブジェクトのパブリック メソッド、プロパティにのみアクセスできるようになりました。

于 2010-01-16T21:38:53.913 に答える