Attribute در برنامه نویسی با سی شارپ
Attribute در برنامه نویسی با سی شارپ ابزاری برای افزودن متادیتا به کلاسها، متدها و ویژگیها و مدیریت بهتر رفتار برنامه است.
Attribute در برنامهنویسی با سی شارپ
در زبان برنامهنویسی #C، یکی از قابلیتهای قدرتمند و کاربردی، Attribute یا «ویژگی» است.
Attributeها امکان افزودن اطلاعات توصیفی (Metadata) به عناصر مختلف برنامه مانند کلاسها، متدها، خصوصیات (Properties)، فیلدها و اسمبلیها را فراهم میکنند.
این اطلاعات در زمان کامپایل در فایل اجرایی ذخیره شده و در زمان اجرا توسط Reflection قابل دسترسی هستند.
استفاده از Attributeها باعث میشود برنامهنویسان بتوانند اطلاعات اضافی را بدون تغییر منطق اصلی برنامه به اجزای مختلف اضافه کنند.
بسیاری از فریمورکهای داتنت مانند ASP.NET، Entity Framework و NUnit به شکل گسترده از Attributeها برای پیکربندی و مدیریت رفتار برنامه استفاده میکنند.
Attribute در سی شارپ چیست؟
Attribute نوعی کلاس ویژه در داتنت است که از کلاس پایه System.Attribute ارثبری میکند.
این کلاسها برای الصاق اطلاعات اضافی به عناصر کد مورد استفاده قرار میگیرند.
به عنوان مثال:
[Obsolete]
public void OldMethod()
{
Console.WriteLine("This method is obsolete.");
}
در این مثال، Attribute به نام Obsolete به متد OldMethod اضافه شده است.
این Attribute به کامپایلر اعلام میکند که متد مذکور قدیمی بوده و بهتر است از آن استفاده نشود.
مزایای استفاده از Attribute در سی شارپ
استفاده از Attributeها مزایای متعددی دارد که برخی از مهمترین آنها عبارتاند از:
1. افزایش خوانایی کد
با استفاده از Attributeها میتوان اطلاعات مهم را مستقیماً در کنار کد نمایش داد و درک عملکرد بخشهای مختلف برنامه را آسانتر کرد.
2. جداسازی تنظیمات از منطق برنامه
بسیاری از تنظیمات برنامه میتوانند به صورت Attribute تعریف شوند و نیازی به نوشتن کد اضافی نباشد.
3. پشتیبانی از Reflection
اطلاعات ذخیره شده در Attributeها در زمان اجرا قابل بازیابی هستند و میتوان از آنها برای ساخت سیستمهای پویا استفاده کرد.
4. توسعهپذیری بالا
برنامهنویسان میتوانند Attributeهای سفارشی خود را ایجاد کرده و رفتارهای جدیدی به برنامه اضافه کنند.
ساختار کلی Attribute در سی شارپ
در #C تمامی Attributeها داخل براکت مربعی قرار میگیرند:
[AttributeName]
یا:
[AttributeName(Parameter)]
همچنین میتوان چندین Attribute را همزمان روی یک عضو اعمال کرد:
[Serializable]
[Obsolete]
public class Customer
{
}
Attributeهای پرکاربرد در #C
-
Obsolete
یکی از معروفترین Attributeهای موجود در داتنت است که برای علامتگذاری کدهای قدیمی استفاده میشود.
[Obsolete("Use NewMethod instead")]
public void OldMethod()
{
}
در صورت استفاده از این متد، کامپایلر هشدار نمایش میدهد.
-
Serializable
برای مشخص کردن اینکه یک کلاس قابلیت Serialization دارد.
[Serializable]
public class User
{
public string Name { get; set; }
}
این Attribute به سیستم داتنت اعلام میکند که اشیای این کلاس میتوانند به فایل یا شبکه تبدیل شوند.
-
Conditional
این Attribute اجرای یک متد را به وجود یک شرط کامپایل وابسته میکند.
[Conditional("DEBUG")]
public static void Log(string message)
{
Console.WriteLine(message);
}
در این حالت فقط در حالت Debug اجرا خواهد شد.
-
AttributeUsage
برای تعیین محل استفاده از یک Attribute سفارشی به کار میرود.
[AttributeUsage(AttributeTargets.Class)]
public class MyAttribute : Attribute
{
}
در این مثال Attribute فقط روی کلاسها قابل استفاده است.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ

ایجاد Attribute سفارشی در سی شارپ
یکی از مهمترین قابلیتهای #C امکان ساخت Attributeهای اختصاصی است.
برای ایجاد یک Attribute جدید باید از کلاس Attribute ارثبری کنیم.
مثال:
public class AuthorAttribute : Attribute
{
public string Name { get; set; }
public AuthorAttribute(string name)
{
Name = name;
}
}
استفاده:
[Author("Ali Ahmadi")]
public class Product
{
}
در اینجا نام نویسنده کلاس به صورت Metadata ذخیره شده است.
بازیابی اطلاعات Attribute با Reflection
یکی از کاربردهای اصلی Attributeها استفاده از Reflection برای خواندن اطلاعات ذخیره شده است.
مثال:
using System;
using System.Reflection;
class Program
{
static void Main()
{
Type type = typeof(Product);
object[] attributes =
type.GetCustomAttributes(false);
foreach (object attr in attributes)
{
if (attr is AuthorAttribute author)
{
Console.WriteLine(author.Name);
}
}
}
}
خروجی:
Ali Ahmadi
استفاده از چند پارامتر در Attribute
Attributeها میتوانند چندین پارامتر دریافت کنند.
public class InfoAttribute : Attribute
{
public string Author { get; }
public string Version { get; }
public InfoAttribute(string author, string version)
{
Author = author;
Version = version;
}
}
استفاده:
[Info("Ali", "1.0")]
public class Report
{
}
استفاده از Property در Attribute
علاوه بر پارامترهای سازنده، میتوان Property نیز تعریف کرد.
public class DeveloperAttribute : Attribute
{
public string Name { get; }
public string Department { get; set; }
public DeveloperAttribute(string name)
{
Name = name;
}
}
استفاده:
[Developer("Ali", Department = "Software")]
public class Employee
{
}
-
AttributeTargets
هنگام تعریف Attributeهای سفارشی میتوان مشخص کرد که روی چه عناصری قابل استفاده باشند.
برخی از مقادیر مهم:
| مقدار | توضیح |
| Class | کلاس |
| Method | متد |
| Property | خصوصیت |
| Field | فیلد |
| Event | رویداد |
| Interface | اینترفیس |
| Enum | شمارشگر |
| Struct | ساختار |
| Assembly | اسمبلی |
مثال:
[AttributeUsage(
AttributeTargets.Method |
AttributeTargets.Class)]
public class TestAttribute : Attribute
{
}
-
AllowMultiple
به طور پیشفرض هر Attribute فقط یک بار روی عضو قابل استفاده است.
برای اجازه دادن به استفاده چندباره از ویژگی AllowMultiple استفاده میشود.
[AttributeUsage(
AttributeTargets.Class,
AllowMultiple = true)]
public class AuthorAttribute : Attribute
{
public string Name { get; }
public AuthorAttribute(string name)
{
Name = name;
}
}
استفاده:
[Author("Ali")]
[Author("Reza")]
public class Book
{
}
-
Inherited
این گزینه تعیین میکند که آیا Attribute در کلاسهای فرزند نیز به ارث برسد یا خیر.
[AttributeUsage(
AttributeTargets.Class,
Inherited = true)]
public class MyAttribute : Attribute
{
}
کاربرد Attributeها در ASP.NET Core
در ASP.NET Core از Attributeها بسیار استفاده میشود.
نمونه:
[HttpGet]
public IActionResult GetUsers()
{
return Ok();
}
یا:
[Authorize]
public IActionResult Dashboard()
{
return View();
}
در اینجا Attributeها رفتار کنترلر و اکشن را مشخص میکنند.
کاربرد Attributeها در Entity Framework
در Entity Framework نیز برای نگاشت کلاسها به جداول پایگاه داده استفاده میشوند.
مثال:
public class User
{
[Key]
public int Id { get; set; }
[Required]
public string Name { get; set; }
[MaxLength(50)]
public string Email { get; set; }
}
این Attributeها ساختار دیتابیس را تعیین میکنند.
تفاوت Attribute و Comment در سی شارپ
گاهی Attribute با Comment اشتباه گرفته میشود، اما تفاوتهای مهمی دارند:
| Attribute | Comment |
| فقط برای برنامهنویس | برای برنامه و کامپایلر |
| در زمان اجرا وجود ندارد | در زمان اجرا قابل دسترسی است |
| تاثیری بر رفتار برنامه ندارد | میتواند رفتار برنامه را تغییر دهد |
بهترین شیوههای استفاده از Attribute
- از Attributeها برای نگهداری Metadata استفاده کنید.
- از تعریف Attributeهای پیچیده و سنگین خودداری کنید.
- در صورت نیاز به پیکربندیهای زیاد از Property استفاده نمایید.
- از Reflection فقط در مواقع ضروری استفاده کنید زیرا ممکن است بر عملکرد برنامه تأثیر بگذارد.
- نام Attributeها را واضح و معنادار انتخاب کنید.

جمعبندی
Attribute یکی از امکانات مهم و قدرتمند زبان C# است که به توسعهدهندگان اجازه میدهد اطلاعات توصیفی و تنظیمات مختلف را به اجزای برنامه اضافه کنند.
این قابلیت در بسیاری از فناوریهای مبتنی بر داتنت مانند ASP.NET Core، Entity Framework و سیستمهای تست نرمافزار کاربرد گستردهای دارد.
Attributeها با استفاده از Reflection قابل خواندن هستند و میتوانند رفتار برنامه را در زمان اجرا یا کامپایل تحت تأثیر قرار دهند.
همچنین امکان ساخت Attributeهای سفارشی باعث شده است که برنامهنویسان بتوانند چارچوبها و ابزارهای اختصاصی خود را با انعطافپذیری بالا توسعه دهند.


کاربران ما
شما هم نظرتون با ما دریاره “Attribute در برنامه نویسی با سی شارپ” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید