DOES C#はちょうど別のフィールドに割り当てることで、フィールドのデータをコピーしたり、データを参照しますか?
-
21-09-2019 - |
質問
別のフィールドを割り当てることで、C#はちょうど上のデータをコピーし、または実際にリンクを作成しますか? このの記事ではゲームエンジンの構造の例があります。コーダは、コンポーネントがその親が含まれているがあります。 C#では、彼らは親のコピーが含まれているか、または、彼らはそれを参照してください?
例コード:
class World
{
...
public void Update()
{
...
ent.OnAttach(this);
...
}
...
}
class Entity
{
...
public void OnAttach(World world)
{
world_ = world;
}
...
}
今Entityオブジェクトアクセス世界のオブジェクトとはarticeのように、それのフィールドとメソッドへのアクセスを持ってもらえますか? (またはIコードを誤解?)
解決
あなたのデータ型World
がclass
なくstruct
のように定義されているので、あなたがその型の変数を割り当てることを意味し、唯一のの参照の同じデータがコピーされます。
他のwrodsでは、あなたがしてworld.SomeProperty = something
を使用するかどうか、彼らはメモリ内の同じオブジェクトを編集しますworld_.someProperty = something
ます。
struct
であるためにあなたのデータの種類を変更する場合は、その後、データ構造全体がコピーされますと、あなたは、同じデータのコピーを2つ持つことになります。
にかかわらず、あなたは、そのメソッドやプロパティにアクセスすることができ、データへの参照を持っていたら、あなたは、あなたのデータをどのように定義したかの。エンティティ・オブジェクトは、世界のオブジェクトへの参照を持っていたら、そう、そう、それは(限り、彼らがプライベートではありませんように)上の任意のメソッドやプロパティにアクセスすることができます。
他のヒント
これはWorld
の種類によって異なります。それが参照型(クラス)だ場合、コピーされた参照が同じオブジェクトを指しているので、元のオブジェクトに影響を与えます新しい参照が指すオブジェクトを変更します(新しいオブジェクトが作成されません)。この掲示サンプルの場合です。フィールドには、単に同じWorld
オブジェクトを参照します。
World
型が値型の場合、、それは(その内容と共に)コピーだと元には影響を与えないであろう変化、全く異なる値になるだろう。
などのエンティティ&ワールドクラス(すなわち「参照型」)され、その後、彼らはお互いへの参照を持っているでしょう。一つの構造体(すなわち、A「値型」)であった場合、enite事がコピーされる。
あなたは参照渡しと値渡しを見ている必要があります。あなたはデータこのオブジェクトが存在するが含まれているメモリ内の場所への参照を渡しているので、あなたの世界のオブジェクトは、参照によって渡されます。
エンティティは、今だけの世界のオブジェクトのパブリックメソッド、プロパティにアクセスすることができます。