سؤال

وعندما كنت أعمل مع XmlDOM في Asp.Net، كان هناك نمط من هذا القبيل:. `XmlReader القارئ = XmlReader.Create ()"

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

وأود أن أعرف ما هو الفرق بين ساكنة منشئ و "اسم_الفئة جديد ()" منشئ (ولست متأكدا إذا أنا باستخدام مصطلحات المناسبة لوصف ما أعنيه).

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

وشكرا مقدما.

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

المحلول

وأولا وقبل كل شيء، دعونا الحصول على المصطلحات في النظام. XmlReader.Create هو لا منشئ ثابت. انها مجرد وسيلة ثابت (عادة) إرجاع حالات جديدة للأشياء، وهذا ما يسمى عادة "طريقة المصنع". A "منشئ ثابت" سيكون منشئ أعلن مع static الكلمة، وتستخدم لتهيئة أعضاء ثابتة من فئة:

class MyClass {
   static MyClass() { ... } // static constructor
}

والآن لماذا طريقة المصنع قد يكون من الأفضل. يمكن أن يكون هناك عدة أسباب.

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

وهناك سبب آخر هو أنه عند القيام new T()، أنت <م> دائما الحصول على وجه التحديد مثيل T. وهناك طريقة مصنع بدلا من ذلك يمكن إنشاء مثيل من بعض فئة فرعية من T، اعتمادا على معلمات الإدخال وعوامل أخرى. في حالة XmlReader، وهذا هو بالضبط ما يحدث - XmlReader في حد ذاته هو abstract، لذلك لا يمكن أن يكون هناك أي حالات من ذلك. ومع ذلك، هناك العديد من الفئات الفرعية التي تخدم أغراض مختلفة (التحقق من صحة / عدم التحقق من صحة، تيار الخلفية / المدعومة DOM، الخ)، وXmlReader.Create يختار حق واحد على أساس الزائد والحجج التي قمت بإرسالها إليه.

نصائح أخرى

ويستخدم منشئ ثابت إلى تهيئة أي بيانات ثابتة، أو لأداء عمل معين يحتاج تنفيذها مرة واحدة فقط. ويطلق عليه تلقائيا قبل إنشاء المحاكم الابتدائية أو أي أعضاء ثابت ويستخدم منشئ referenced.Classic تهيئة المتغيرات سبيل المثال، ودعا كل مرة يتم إنشاء الكائن

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

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