لماذا أحتاج إلى "الحقل": "في إعلان سمة الخاص بي" [الحقل: غير نادي] "؟

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

سؤال

لا يمكنني العثور على "حقل" مدرج ككلمة رئيسية C # في أي مكان. هل يعرف أحد الخلفية في هذا؟

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

المحلول

عادة ما يكون للمترجم C # مشكلة في معرفة أي جزء من الإعلان الذي تنطبق عليه السمة على. أستطيع أن أفكر في ثلاث حالات قد تستخدمها:

  1. السمات التي تنطبق على التجمع. مرئي جدا في casselessinfo.cs
  2. سمة مطبقة على قيمة إرجاع إعلان P / Invoke، [العودة: Marshalas
  3. تنطبق السمة على متغير النسخ الاحتياطي للممتلكات أو الحدث دون مواقف. حالتك.

نصائح أخرى

هذا ضروري، على سبيل المثال، إذا كنت تقوم بوضع علامة على حدث غير قابل للتسلسل. يحدد الهدف الذي تنطبق السمة عليه.

إنه جزء من بناء جملة السمة المستهدفة. من تخصيص:

attribute-target:
    field
    event
    method
    param
    property
    return
    type

انظر أيضا الوثائق ل NonSerializedAttribute:

لتطبيق NonSerializedAttribute فئة إلى حدث، اضبط موقع السمة إلى الحقل، كما هو موضح في رمز C # التالي.

[field:NonSerializedAttribute()]

public event ChangedEventHandler Changed;

من المفترض أن يسمح لك بذلك بسمة غير مالية في الحقول، وهذا مفيد في أحداث التسلسل.

على سبيل المثال، هذا من شأنه أن يمنحك خطأ في تجميع

[NonSerialized]
public event SomeEventHandler SomeEvent;

لإصلاح هذا لديك لاستخدام field:

[field:NonSerialized]
public event SomeEventHandler SomeEvent;

المزيد عن هذا هنا - المندوبين والتفجيرات

لا ينطبق NONSERIALIALIALITATTATTRIVET فقط على الحقول، يمكنك استخدامه على النحو التالي:

[NonSerialized]
public string myString;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top