لماذا أحتاج إلى "الحقل": "في إعلان سمة الخاص بي" [الحقل: غير نادي] "؟
-
19-09-2019 - |
سؤال
لا يمكنني العثور على "حقل" مدرج ككلمة رئيسية C # في أي مكان. هل يعرف أحد الخلفية في هذا؟
المحلول
عادة ما يكون للمترجم C # مشكلة في معرفة أي جزء من الإعلان الذي تنطبق عليه السمة على. أستطيع أن أفكر في ثلاث حالات قد تستخدمها:
- السمات التي تنطبق على التجمع. مرئي جدا في casselessinfo.cs
- سمة مطبقة على قيمة إرجاع إعلان P / Invoke، [العودة: Marshalas
- تنطبق السمة على متغير النسخ الاحتياطي للممتلكات أو الحدث دون مواقف. حالتك.
نصائح أخرى
هذا ضروري، على سبيل المثال، إذا كنت تقوم بوضع علامة على حدث غير قابل للتسلسل. يحدد الهدف الذي تنطبق السمة عليه.
إنه جزء من بناء جملة السمة المستهدفة. من تخصيص:
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;