سؤال

قرأت في مكان ما, على الرغم من أنني لا أتذكر أين هذا باستخدام قفل الكلمات الرئيسية في C# يمكن تخصيص.

وأنا أعلم أن تحاول قفل ValueType سوف مربع valuetype ، ولكن هل هناك أي الحالات ؟

تحرير::

  1. يبدو أن الجميع الإجابة valuetype حال, أنا بالفعل أعرف هذا!
  2. أعرف أيضا ما الأقفال ، كيفية استخدامها في عمق كبير ، نصائح عامة حول أفضل الممارسات لطيفة - ولكن بلا فائدة؛)
  3. أريد أن لأني بناء XNA التطبيق للنشر على أجهزة إكس بوكس.إكس بوكس جامع القمامة بطيئة حقا - هذا يعني أنني بحاجة للحفاظ على مخصصات الحد الأدنى ، ويفضل غير موجودة (الذي يمنع جامع من أي وقت مضى تشغيل)
هل كانت مفيدة؟

المحلول

في حين تخصيص راجع مزامنة كتلة داخليا هو كسول (ولكن هذا التنفيذ التفاصيل التي IIRC أعلم من Essential.NET 'حجم 1' ، أو هو CLR عن طريق C# - وينبغي أن تعامل على أنها فقط) ، حالة بسيطة من البند الحاجة إلى أن تكون محاصر كأنك تلمح لا تنشأ - انظر لماذا قفل(<integer var="">) غير مسموح ، ولكن الشاشة.أدخل(<integer var="">) مسموح ؟

نصائح أخرى

إذا كنت تفكر في استخدام:

قفل(هذا)

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

قفل(typeof(MyClass))

إذا كنت لا تريد أن تفعل هذا ، يمكنك بسهولة تخصيص ثابت أو مثيل كائن (أي كائن myLock = new object ()) ، ثم قفل على ذلك.

المصدر

بقدر ما قفل على نوع مرجع vs نوع القيمة, هذا لذا السؤال على تأمين الموارد عند الحصول عليها... الجواب:

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

تعريف قفل البيان:

قفل البيان (ج# المرجعية)

قفل الكلمات الرئيسية العلامات بيان كتلة حاسمة من قبل القسم الحصول على متبادل استبعاد قفل معين كائن تنفيذ بيان ومن ثم إطلاق قفل.

هذا لذا السؤال على قفل الكلمات الرئيسية في C# قد تكون قادرة على مساعدة.يمكنك أيضا أن ننظر في لماذا قفل() غير مسموح ، ولكن الشاشة.أدخل() مسموح ؟

مواصفات المترجم يعرف سلوك قفل مثل ذلك:

وقت الترجمة نوع من التعبير قفل البيان إشارة من نوع أو نوع > المعلمة (§25.1.1) من المعروف أن نوع مرجع.بل هو وقت التحويل البرمجي خطأ وقت التحويل البرمجي نوع من التعبير للدلالة على قيمة من نوع.

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