نقل قول نوشته شده توسط foxhacker مشاهده تاپیک
ببخشید فک کنم کد ها بد نمایش داده شدن لطفن کپی کنین تو ویژوال استودیو درست میشه
صفت ئه، Attribute ئه. Attribute ها کلاس هایی هستند که وارث کلاس System.Attribute شدن و پسوند Attribute در نام کلاس شون هم برای سهولت در کد نویسی اختیاری است، یعنی مثلا اسم کلاس اش در اصل DllImportAttribute ئه ولی در کد می توانید بجای DllImportAttribute با نام DllImport هم بهش اشاره کنید.
صفت حقیقتا خودش به تنهایی کار خاصی انجام نمیده، یعنی اگر فرضا من برای فیلد یا مشخصه یا کلاس فلان یک صفت MyAttribute درج کنم، MyAttribute خودش کاری انجام نمیده.
اما در روال دیگری مثلا برای کامپایلر کد نویسی شده که اگر صفت فلان رو دیدی، بیا و فلان عمل خاص رو انجام بده، مثلا اگر صفت DllImport رو دیدی، ارتباط با یک متد کتابخانه DLL رو برقرار کن. برای اینکه بدونید هر صفت چه نقشی داره باید راهنمای اون کلاس خاص رو مطالعه کنید چون هر صفت ای نقش و تاثیر کاملا متفاوتی داره.
انواع صفت ها رو داریم، بعضی هاشون عمومی هستند و بعضی هاشون اختصاصی کتابخانه های متفرقه و بعضی هاشون رو هم خودتون برای منظوری خاصی کد نویسی می کنید.

فرضا اگر در نسخه جدید یک کلاس بخواهیم یک متد قدیمی رو با نسخه پیشرفته تر دیگری جایگزین کنیم ولی نخواهیم اون متد قبلی رو حذف کنیم، یک صفت Obsolete رو به متد قدیمی اضافه می کنیم تا با پیامی به برنامه نویس هشدار بده که این متد دیگه منسوخ شده و بهتره ازش استفاده نکنی. یا اگر بخواهیم یک مشخصه در کلاس قابل دسترسی باشه ولی پنهان باشه، از صفت EditorBrowsable استفاده می کنیم. یا اگر بخواهیم در یک کنترل یک مشخصه ای داشته باشیم که در پنجره Properties نمایش داده نشه از مشخصه Browsable استفاده می کنیم، یا اگر بخواهیم یک مجموعه enum تعریف کنیم که فیلدهاش بصورت ترکیبی (نه صرفا تکی) تفسیر می شوند، از صفت Flags استفاده می کنیم.