هل C # حل التبعيات بين أعضاء البيانات الثابتة تلقائيا؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

إذا كان عضو واحد ثابت للبيانات يعتمد على عضو آخر ثابت للبيانات، فهل C # /. الضمان الصافي يتم تهيئة العضو الثابت يعتمد قبل العضو التابع؟

على سبيل المثال، لدينا فئة واحدة مثل:

class Foo
{
    public static string a = "abc";

    public static string b = Foo.a + "def";
}

متى Foo.B. يتم الوصول إليها، هل هي دائما "ABCDEF" أو يمكن أن تكون "DEF"؟

إذا لم يكن ذلك مضمون، فهل هناك طريقة أفضل للتأكد من تهيئة العضو الأول أولا؟

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

المحلول

مثل ما قاله من قبل، فإن تهيئة الحقل الثابت محتملة وتذهب وفقا لطلب الإعلان النصي.

خذ هذا، على سبيل المثال:

class Foo
{
    public static string b = a + "def";
    public static string a = "abc";
}

سوف foo.b دائما يؤدي إلى "def".

بالنسبة لهذه المسألة، عندما يكون هناك تبعية بين الحقول الثابتة، فمن الأفضل استخدام تهيئة ثابتة:

class Foo
{
    public static string b;
    public static string a;

    static Foo()
    {
        a = "abc";
        b = a + "def";
    }
}

بهذه الطريقة، تعبر صراحة عن قلقك إزاء أمر التهيئة؛ أو التبعية لهذه المسألة (حتى إذا لم يساعد المحول البرمجي إذا قمت بتبديل بيانات التهيئة بطريق الخطأ.) سيكون لها القيم المتوقعة المخزنة في A و B (على التوالي "ABC" و "ABCDEF").

ومع ذلك، قد تحصل الأمور على ملتوية (وتنفيذ محددة) لتهيئة الحقول الثابتة المحددة في فصول متعددة. القسم 10.4.5.1 التهيئة الحقل الثابت من مواصفات اللغة تتحدث عن ذلك أكثر من ذلك.

نصائح أخرى

سوف يظهر دائما "ABCDEF"، لأن التهيئة تنخفض في المصدر، اليوم تماما كما كان من قبل.

سيتم تهيئة جميع الأعضاء الثابت عند تحميل Classtype الاحتفاظ بها.

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