دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
SEQUENCES در SQL
1403/12/23 -
Attribute در سی شارپ
1403/12/23 -
متغیرها در پایگاه داده SQL
1403/12/22 -
آشنایی با Multi-Threaded در سی شارپ
1403/12/22 -
ایجاد و حذف View در پایگاه داده SQL
1403/12/21
Attribute در سی شارپ

Attribute در سی شارپ
در سی شارپ، Attributeها ویژگیهایی هستند که به متادیتای کد اضافه میشوند و اطلاعات اضافی در مورد عناصر برنامه (مانند کلاسها، متدها، پراپرتیها و متغیرها) ارائه میدهند.
این ویژگیها معمولاً برای تعیین رفتار خاصی در زمان کامپایل یا اجرا استفاده میشوند.
به عنوان مثال، Attributeهایی مانند [Obsolete] برای علامتگذاری متدهای منسوخشده و [Serializable] برای تعیین قابلیت سریالسازی یک کلاس به کار میروند.
برای تعریف یک Attribute سفارشی، باید یک کلاس ایجاد کرد که از System.Attribute ارثبری کند.
سپس این Attribute را میتوان روی عناصر مختلف برنامه اعمال کرد.
به عنوان مثال، در کد زیر یک Attribute سفارشی به نام AuthorAttribute تعریف شده که اطلاعات نویسنده را ذخیره میکند:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class AuthorAttribute : Attribute
{
public string Name { get; }
public AuthorAttribute(string name)
{
Name = name;
}
}
[Author("Ali Rezaei")]
public class SampleClass
{
[Author("Sara Ahmadi")]
public void SampleMethod() { }
}
در این مثال، Attribute Author اطلاعات مربوط به نویسنده کلاس و متد را نگه میدارد و از طریق Reflection میتوان این اطلاعات را در زمان اجرا دریافت کرد.
مثال ساده دیگر از Attribute:
using System;
class Program
{
[Obsolete("این متد قدیمی شده است، لطفاً از NewMethod استفاده کنید.")]
static void OldMethod()
{
Console.WriteLine("متد قدیمی");
}
static void NewMethod()
{
Console.WriteLine("متد جدید");
}
static void Main()
{
OldMethod(); // هشدار کامپایلر نمایش داده میشود.
NewMethod();
}
}
در اینجا، Attribute [Obsolete] به متد OldMethod اضافه شده و هشدار میدهد که این متد قدیمی است.
انواع Attribute داخلی در سی شارپ
سی شارپ دارای چندین Attribute داخلی است که به برنامهنویسان کمک میکنند. در این بخش، برخی از این Attributeها را بررسی میکنیم.
-
Obsolete
همانطور که در مثال قبل مشاهده کردید، [Obsolete] برای مشخص کردن متدهای منسوخ استفاده میشود.
[Obsolete("این متد دیگر توصیه نمیشود.")] -
Serializable
از این Attribute برای مشخص کردن کلاسهایی که قابلیت سریالسازی دارند، استفاده میشود.
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
این Attribute مشخص میکند که کلاس Person قابل سریالسازی است.
-
DllImport
برای فراخوانی کتابخانههای خارجی مانند DLLهای ویندوز استفاده میشود.
using System.Runtime.InteropServices;
class Program
{
[DllImport("user32.dll")]
public static extern int MessageBox(IntPtr hWnd, string text, string caption, int type);
static void Main()
{
MessageBox(IntPtr.Zero, "سلام دنیا", "پیغام", 0);
}
}
نحوه ساخت Attribute سفارشی در سی شارپ
گاهی اوقات نیاز داریم که Attribute مخصوص به خودمان را ایجاد کنیم.
برای این کار، باید یک کلاس مشتق شده از Attribute بسازیم.
-
ایجاد یک Attribute سفارشی
using System;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyCustomAttribute : Attribute
{
public string Description { get; }
public MyCustomAttribute(string description)
{
Description = description;
}
}
-
استفاده از Attribute سفارشی
[MyCustom("این یک کلاس نمونه با Attribute سفارشی است")]
public class SampleClass
{
[MyCustom("این یک متد نمونه است")]
public void SampleMethod()
{
Console.WriteLine("متد اجرا شد");
}
}
-
خواندن Attributeها در زمان اجرا با Reflection
برای خواندن Attributeها از Reflection استفاده میکنیم.
using System;
using System.Reflection;
class Program
{
static void Main()
{
Type type = typeof(SampleClass);
var attributes = type.GetCustomAttributes(typeof(MyCustomAttribute), false);
foreach (MyCustomAttribute attr in attributes)
{
Console.WriteLine($"توضیح کلاس: {attr.Description}");
}
}
}
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
کاربرد Attribute در سی شارپ
ttributeها در سی شارپ برای افزودن متادیتا به کد استفاده میشوند و در سناریوهای مختلفی کاربرد دارند، از جمله:
-
کنترل رفتار کامپایلر
با [Obsolete] میتوان متدهای منسوخ را مشخص کرد تا هنگام استفاده از آنها هشدار دریافت شود. -
سریالسازی دادهها
با [Serializable] میتوان یک کلاس را برای تبدیل به فرمتهای مختلف مانند JSON یا XML آماده کرد. -
مدیریت امنیت و دسترسی
با [Authorize] در ASP.NET Core میتوان سطح دسترسی کاربران را کنترل کرد. -
کنترل تستهای واحد
فریمورکهایی مانند xUnit و NUnit از [Fact] و [Test] برای مشخص کردن متدهای تست استفاده میکنند. -
بازتاب (Reflection) و پردازش دادهها
برخی Attributeها مانند [MetadataType] برای تعیین ویژگیهای مدل در Entity Framework به کار میروند.
مثال استفاده از [Obsolete]
class Sample
{
[Obsolete("از متد NewMethod استفاده کنید")]
public void OldMethod() { }
public void NewMethod() { }
}
در این مثال، هنگام استفاده از OldMethod، هشدار دریافت خواهید کرد که متد جدیدی جایگزین آن شده است.
مزایای استفاده از Attribute در سی شارپ
-
Attributeها به برنامهنویسان کمک میکنند تا:
-
اطلاعات اضافی را به کد اضافه کنند.
-
قابلیت پردازش متاداده را فراهم کنند.
-
کدنویسی خواناتر و ساختارمندتری داشته باشند.
-
مدیریت ویژگیهای کلاسها و متدها را بهبود دهند.
مثال پروژهمحور از Attribute در سی شارپ
سیستم مدیریت کاربران با Attributeهای سفارشی
در این بخش، یک پروژه ساده برای مدیریت کاربران با استفاده از Attributeهای سفارشی پیادهسازی خواهیم کرد.
-
تعریف Attribute سفارشی برای سطح دسترسی کاربران
ابتدا یک Attribute برای تعیین سطح دسترسی کاربران ایجاد میکنیم.
using System;
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class AccessLevelAttribute : Attribute
{
public string Role { get; }
public AccessLevelAttribute(string role)
{
Role = role;
}
}
-
تعریف کلاس مدیریت کاربران
using System;
public class UserManager
{
[AccessLevel("Admin")]
public void DeleteUser()
{
Console.WriteLine("کاربر حذف شد.");
}
[AccessLevel("User")]
public void ViewProfile()
{
Console.WriteLine("نمایش پروفایل کاربر.");
}
}
-
بررسی سطح دسترسی با Reflection
اکنون، متدهایی را برای بررسی سطح دسترسی کاربران پیادهسازی میکنیم.
using System;
using System.Reflection;
class Program
{
static void ExecuteMethodBasedOnRole(object obj, string methodName, string userRole)
{
MethodInfo method = obj.GetType().GetMethod(methodName);
if (method != null)
{
var attribute = (AccessLevelAttribute)method.GetCustomAttribute(typeof(AccessLevelAttribute));
if (attribute != null && attribute.Role == userRole)
{
method.Invoke(obj, null);
}
else
{
Console.WriteLine("دسترسی غیرمجاز");
}
}
else
{
Console.WriteLine("متد یافت نشد.");
}
}
static void Main()
{
UserManager userManager = new UserManager();
ExecuteMethodBasedOnRole(userManager, "DeleteUser", "Admin"); // موفقیتآمیز
ExecuteMethodBasedOnRole(userManager, "DeleteUser", "User"); // دسترسی غیرمجاز
ExecuteMethodBasedOnRole(userManager, "ViewProfile", "User"); // موفقیتآمیز
}
}
دوره های مرتبط

آموزش برنامه نویسی سی شارپ
زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.