PDA

View Full Version : حرفه ای: attributeها در C#



hmahdavi921
شنبه 09 خرداد 1394, 14:59 عصر
با سلام
من هر چه قدر جستجو کردم درباره attribute ها مطلب کاملی پیدا نکردم دوستان کسی درباره attribute اطلاعی داره و از تعریف و نحوه و موارد استفادش چیزی میدونه؟
تو نت فارسی اصلا به این موضوع پرداخته نشده.
دوستان لطفا راهنمایی کنید.

ali_md110
شنبه 09 خرداد 1394, 21:29 عصر
سلام
attribute ها برچسب یا یک صفتی اضافی یا یک مشخقه خاصی به یک شی یا فیلد یا کلاس اضافه میکنه
فرض کنید یک فیلد داریم بنام Name


public string Name { get; set; }

این فیلد میاد نام شخص رو درون خودش ذخیره میکنه حالا ما میخایم بگیم اید فیلد یک صفت دیگه هم داشته باشه مثلا اسامی بیشتر از 10 حرف نداشته باشه و یا یک صفت دیگه مثلا فیلد Name فقط حروف انگلسی کوچک قبول کنه یا مثلا فیلد حتما باید مقدار داشته باشه مثل IsRequired که در زیر پیاده خواهیم کرد




[Validations(IsRequired= true)]
public string Name { get; set; }


ما میتونیم با نوشتن کدهای دیگه این کنترلها رو انجام بدیم ولی صفت ها میشه یک بار تعزیف و به تعداد زیادی عضو نسبت بدیم
نحوه ساختن یک attribute سفارشی خیلی ساده هست



[AttributeUsage(AttributeTargets.All)]
public class ValidationsAttribute : ValidationAttribute
{

public string RegexExpression { get; set; }
public bool IsRequired{ get; set; }
}



عنوان کلاس ما Validations هست که یک Attributeطبق قرار دارد صفات به کلاس اضافه میکنیم و میشه ValidationsAttribute موقع صدا زدن صفات Attribute بوسیله رفلکشن اتوماتیک مخفی میشه
این کلاس رو با صفت AttributeUsage که دارای پارامترهای مختتلفی هست مزین میکنیم


[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)]

این پارامترها میگه که صفتی که داریم میسازیم فقط بر روی فیلدها و پراپرتیها بچسب
البته یک گزینه دیگه هم داره


[AttributeUsage(AttributeTargets.All)]

میگه که مقصد یا جاییکه این صفت قابل چسبوندن هست شامل همه نوعی هست حتی یک کلاس
مرجله بعدی باید یک کلاس دیگه بسازیم و IsRequired رو شرط بندی کنیم و استثنائات رو اونجا مدیریت کنیم