[C#] كيف يعمل منشئ ثابت؟


Answers

وفقا ل مسن ، منشئ ثابت:

يتم استدعاء منشئ ثابت تلقائيا لبدء تهيئة الفئة قبل إنشاء المثيل الأول أو المشار إليها أي أعضاء ثابت.

لذلك سيتم استدعاء منشئ ثابت قبل استدعاء الأسلوب الثابت MyClass.MyMethod() (على افتراض عدم استدعاء أيضا خلال بناء ثابت أو تهيئة حقل ثابت بالطبع).

الآن، إذا كنت تفعل أي شيء غير متزامن في هذا static constructor ، ثم انها عملك لمزامنة ذلك.

Question
namespace MyNameSpace
{
    static class MyClass
    {
        static MyClass()
        {
            //Authentication process.. User needs to enter password
        }

        public static void MyMethod()
        {
            //Depends on successful completion of constructor
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass.MyMethod();
        }
    }
}

هنا هو التسلسل الذي افترضته

  1. بدء البناء الثابت
  2. نهاية منشئ ثابت
  3. بداية الرئيسية
  4. بدء ميميثود
  5. نهاية الرئيسية

الآن في أي سيناريو إذا 4 سوف تبدأ قبل 2 أنا مشدود. هل هو ممكن؟




يتم التأكد من أنه تم استدعاء منشئ فئة ثابتة قبل تنفيذ أي من طرقه. مثال:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Press enter");
        Console.ReadLine();
        Boop.SayHi();
        Boop.SayHi();
        Console.ReadLine();
    }

}

static class Boop
{
    static Boop()
    {
        Console.WriteLine("Hi incoming ...");
    }

    public static void SayHi()
    {
        Console.WriteLine("Hi there!");
    }
}

انتاج:

اضغط دخول

// بعد الضغط على إنتر

مرحبا واردة ...

مرحباً!

مرحباً!




سيتم استدعاء منشئ ثابت قبل تنفيذ ميمثود. ولكن إذا كنت مشدود إذا 4 يسمى قبل 2 ثم أقترح عليك إعادة التفكير التصميم. لا ينبغي أن تفعل أشياء معقدة في منشئ ثابت على أي حال.




من الوثائق (منجم التركيز):

يتم استدعاء منشئ ثابت تلقائيا لبدء تهيئة الفئة قبل إنشاء المثيل الأول أو المشار إليها أي أعضاء ثابت .




أو يمكنك خطوة من خلال في المصحح.