ترتيب العمليات باستخدام بناء جملة تهيئة الكائن

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

سؤال

هل يتم تنفيذ الترتيب الذي أقوم بتعيين الخصائص به باستخدام بناء جملة مُهيئ الكائن بنفس الترتيب بالضبط؟

على سبيل المثال إذا قمت بذلك:

var s = new Person { FirstName = "Micah",
                     LastName = "Martin",
                     IsLoaded = true
                   }

هل سيتم تعيين كل عقار بنفس الترتيب؟

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

المحلول

نعم.

أعتذر عن المقاطعة (لا بد لي من القيام ببعض الأعمال بين الحين والآخر).المواصفات لا صراحة قل ذلك، لكنه يوضح IMO تمامًا في القسم 7.6.10.2:


يتكون مُهيئ الكائن من سلسلة من مُهيئات الأعضاء، محاطة بالرموز المميزة { و } ومفصولة بفواصل.

(لاحظ كلمة "تسلسل" هنا، بدلاً من "مجموعة".أنا شخصياً أعتقد أن هذا أمر مهم، حيث يتم ترتيب التسلسل.)

تمثل الفئة التالية نقطة ذات إحداثيتين:

public class Point
{
    int x, y;
    public int X { get { return x; } set { x = value; } }
    public int Y { get { return y; } set { y = value; } }
}

يمكن إنشاء مثيل Point وتهيئته على النحو التالي:

Point a = new Point { X = 0, Y = 1 };

والذي له نفس التأثير

Point __a = new Point();
__a.X = 0;
__a.Y = 1; 
Point a = __a;

حيث __a هو متغير مؤقت غير مرئي ولا يمكن الوصول إليه.


يحرر:لقد تلقيت ردًا من Mads Torgersen، الذي قال بشكل أساسي أن أي شيء يمكن القيام به الآن سيحافظ على النظام.قد تكون هناك بعض الأمور الشاذة في المستقبل حيث لا يتم الحفاظ على الترتيب في الحالات الغريبة التي تفعل فيها شيئًا ما آخر من تعيين خاصية/حقل، ولكن ذلك يعتمد على المكان الذي تذهب إليه اللغة.

تجدر الإشارة إلى أن هناك بالفعل الكثير من الخطوات الجارية هنا - هناك ترتيب تنفيذ تقييم الوسائط (أي:بتات RHS) وترتيب تنفيذ المهام.على سبيل المثال، إذا كان لديك:

new Foo
{
    A = X,
    B = Y
}

جميع الأوامر التالية ممكنة مع الحفاظ على ترتيب التنفيذ الفعلي للخاصية (أ و ب):

  • قم بتقييم X، وقم بتعيين A، وقم بتقييم Y، وقم بتعيين B
  • قم بتقييم X، قم بتقييم Y، قم بتعيين A، قم بتعيين B
  • قم بتقييم Y، وقم بتقييم X، وقم بتعيينه إلى A، وقم بتعيينه إلى B

أعتقد أن الخيار الأول هو الخيار الذي تم اتخاذه بالفعل، ولكن هذا كان فقط لإثبات أن هناك ما هو أكثر مما تراه العين.

وأود أن أكون كذلك جداً حذرًا من كتابة التعليمات البرمجية فعليًا والتي تعتمد على هذا ...

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