هل C# فقط نسخ بيانات الحقل حول التعيين إلى حقل آخر أو يشير إلى البيانات؟

StackOverflow https://stackoverflow.com/questions/2078974

  •  21-09-2019
  •  | 
  •  

سؤال

عند تعيين حقل لآخر ، هل C# فقط نسخ البيانات ، أو يقوم بالفعل بإنشاء رابط؟ في هذه مقال هناك مثال على بنية محرك اللعبة. يحتوي المبرمج هناك على مكونات تحتوي على الوالدين. في C#، هل تحتوي فقط على نسخة الأصل ، أو أنها تشير إليها؟

رمز المثال:

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

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

هل يمكن للكائن الكيان الآن الوصول إلى كائن العالم والوصول إلى حقوله وطرقه ، كما هو الحال في الفرس؟ (أو أسيء فهم الكود؟)

هل كانت مفيدة؟

المحلول

لأن نوع البيانات الخاص بك World يتم تعريفه على أنه أ class وليس struct هذا يعني أنه عند تعيين متغير من هذا النوع ، فقط أ المرجعي إلى نفس البيانات يتم نسخها.

في البرودة الأخرى ، سواء كنت تستخدم بعد ذلك world.SomeProperty = something أو world_.someProperty = something سوف يقومون بتحرير نفس الكائن في الذاكرة.

إذا قمت بتغيير نوع البيانات الخاص بك ليكون struct ثم سيتم نسخ بنية البيانات بأكملها وسيكون لديك نسختان من نفس البيانات.

بغض النظر عن كيفية تعريفك لبياناتك ، بمجرد أن يكون لديك إشارة إلى البيانات ، يمكنك الوصول إلى أساليبها أو خصائصها. لذا ، نعم ، بمجرد أن يكون لكائن الكيان الخاص بك إشارة إلى الكائن العالمي ، يمكنه الوصول إلى أي طرق أو خصائص عليه (طالما أنها ليست خاصة).

نصائح أخرى

ان ذلك يعتمد على World يكتب. إذا كان نوعًا مرجعيًا (فئة) ، فسيشير المرجع النسخ إلى نفس الكائن ، وبالتالي فإن تغيير الكائن الذي يشير إليه المرجع الجديد سيؤثر على الكائن الأصلي (لا يتم إنشاء كائن جديد). هذا هو الحال في العينة المنشورة. سوف يشير الحقل ببساطة إلى نفس الشيء World هدف.

إذا World النوع هو نوع قيمة ، يتم نسخه (جنبا إلى جنب مع محتوياته) وسيصبح قيمة مميزة تمامًا ، والتي لن تؤثر على الأصل.

نظرًا لأن الكيان والعالم من الطبقة (أي "الأنواع المرجعية") ، فسيكون لديهم إشارات إلى بعضهم البعض. إذا كان أحدهما عبارة عن بنية (أي "نوع القيمة") ، فسيتم نسخ شيء enite.

يجب أن تتم إلقاء نظرة على المرور بالرجوع والمرور بالقيمة. كائن العالم الخاص بك هو مرجع بالرجوع إليه ، لذا فأنت تمرر مرجعًا إلى موقع في الذاكرة حيث توجد البيانات التي يحتوي عليها هذا الكائن.

يمكن للكيان الآن الوصول إلى الأساليب العامة للكائنات العامة والخصائص.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top