PDA

View Full Version : نحوه نوشتن Attribute برای Propertyها



Hamedm
دوشنبه 03 مرداد 1384, 20:17 عصر
سلام

کسی نحوه نوشتن Attribute برای Propertyها رو بلده؟

در پناه حق موفق باشید و پرتوان

titbasoft
سه شنبه 04 مرداد 1384, 12:06 عصر
منظورتون رو واضح تر بگید. یه جورایی attribute که همون property است. منظورتون enumeration که نیست؟

Hamedm
سه شنبه 04 مرداد 1384, 12:29 عصر
سلام

منظورتون رو واضح تر بگید. یه جورایی attribute که همون property است. منظورتون enumeration که نیست؟
نه عزیز جان. منظورم اون نیست.

ببین این نوع Attributeها در ابتدای تعریف Propertyها نوشته میشه و همیشه داخل<> است. نوشتن این Attributeها از قوانین خاص خودش تبعیت میکنه. میخواستم بدونم کسی از دوستان این قوانین رو میدونه. در این زمینه تجربه ای داره؟

در پناه حق موفق باشید و پرتوان

titbasoft
سه شنبه 04 مرداد 1384, 14:58 عصر
گاهی اوقات پیش میاد که یکسری اطلاعات توصیفی برای هر یک از انواع متادیتای (class ها ، property ها ، method ها و ...) شما لازم باشه. مثلا فرض کنید شما می خواهید یک flag برای بعضی از property های خودتون مشخص کنید که اونها رو از بقیه متمایز می کنه . یا مثلا می خواهید اسم نویسنده اون رو بهش اضافه کنید. به طور کلی attribute ها برای مشخص کردن اطلاعاتی بیش از scope یکی از عناصر متادیتا بوجود آمده اند. پس attribute ها صرفا فقط برای property ها استفاده نمی شن و شما می تونید از اونها برای هر نوع از انواع متادیتا استفاده کنید. ولی البته کسی که یک attribute رو نوشته می تونه مشخص کنه که اون attribute برای چه عنصر یا عناصری استفاده بشه.

با این توضیحات می شه گفت تنها قانونی که وجود داره دونستن اینه که چه attribute ای کجا استفاده بشه. که اون هم فقط از طریق MSDN قابل فهمیدن.

در آخر یک مثال فکر کنم همه چیز رو روشن کنه:

فرض کنید یک attribute به این صورت تعریف شده باشه:


<AttributeUsage(AttributeTargets.All)> Public Class DeveloperAttribute

Inherits Attribute

Protected mvarName As String



Public Sub New(ByVal name As String)

Me.mvarName = name

End Sub



Public Property Name() As String

Get

Return mvarName

End Get

Set(ByVal Value As String)

mvarName = Value

End Set

End Property



End Classتوجه کنید که target در این attribute همه (all) مشخص شده.

حالا به این صورت ازش استفاده میشه:


Class DeveloperTest



<Developer("hashem")> Public Sub myMethod()

End Sub



<Developer("ALI")> Public ReadOnly Property myProp() As Boolean

Get

Return True

End Get

End Property



End Classو برای دسترسی به attribute ها هم به این صورت عمل میشه:


Dim dt As New DeveloperTest

Dim dtType As Type = dt.GetType()

Dim mi As System.Reflection.MemberInfo

Dim attr As Attribute



For Each mi In dtType.GetMembers()

For Each attr In Attribute.GetCustomAttributes(mi)

If TypeOf attr Is DeveloperAttribute Then

Dim attrCustom As DeveloperAttribute = CType(attr, DeveloperAttribute)

MsgBox(mi.GetType.ToString & " " & mi.Name() & " has developed by " & attrCustom.Name & " .")

End If

Next

Nextیه چیزی رو که یادم رفت بگم اینه که ما اینجا یک custom attribute تعریف کردیم.

mohssen91
سه شنبه 14 اردیبهشت 1395, 12:17 عصر
سلام دوستان

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

فرق بین اون چیز هایی که توی [ ] نوشته میشن با اون چیزهایی که توی < > نوشته میشن چیه ؟

آیا هر دو اینها attribute هستن ؟

و اینکه آیا تعریف attribute ها برای property فرق داره با attribute های method

آیا لیستی هست که تمام attribute ها رو در دسترس قرار بده

خیلی خیلی ممنونم