在Vb.net中,这段代码“被叫”或“正在”是什么。
具体是<> _之间的东西。我理解房产在做什么。我只是不确定它上面那条线的重要性。
<TheApp.DataHandler.ColumnAttributes("BillingClientName")> _
Public Property BillingClientName As String
Get
Return _BillingClientName
End Get
Set(ByVal value As String)
_BillingClientName = value
End Set
End Property
您能否指出我正确的方向来复制此功能。
答案 0 :(得分:2)
通过“复制它”,我将其视为如何使用自定义属性。首先定义属性:
Public Class FormattedAttribute
Inherits Attribute
Private _flag As Boolean = False
Public Sub New(ByVal b As Boolean)
_flag = b
End Sub
Public ReadOnly Property IsFormatted() As Boolean
Get
Return _flag
End Get
End Property
End Class
属性(通常)只是一个继承自Attribute
的小而简单的类。这个只会在枚举上存储一个True / False标志:
Friend Enum MyEnum
...
<Formatted(True)> FileSize
...
Enum
注意:惯例是定义名称附加Attribute
的类。但在使用中,可以放弃。
属性是编译到您的应用中的元数据。它们提供了关于类,属性,方法等的一些信息。它们本身不做任何事情。目标(类,属性等)无法识别附加到它的任何属性:DefaultValue
或Range
属性本身不执行任何操作 - 它们是用于阅读和使用的其他内容。
接下来,您需要一种方法来从FormattedAttribute
:
Friend Shared Function GetFormatFlag(ByVal EnumConstant As [Enum]) As Boolean
Dim fi As FieldInfo = EnumConstant.GetType().GetField(EnumConstant.ToString())
Dim attr() As FormattedAttribute= _
DirectCast( _
fi.GetCustomAttributes(GetType(FormattedAttribute), False), _
FormattedAttribute())
If attr.Length > 0 Then
Return attr(0).IsFormatted
Else
Return False
End If
End Function
这个长版本允许在您搜索的Type上存在或不存在该属性(实际使用它的情况)。在代码中,通过调用GetFormatFlag
:
IsFormatted = GetFormatFlag(mi)
如果您知道该属性存在,则有一种更简单的方法:
Friend Shared Function GetMyKey() As String
Dim myAttr As myAttribute
myAttr = CType(Attribute.GetCustomAttribute(GetType(myClass), _
GetType(myAttribute)), myAttribute)
Return myAttr.Key
End Function
可以通过传递Type来修改短版本以从任何实现它的类中获取myAttribute
值/键,但这与Attributes一样灵活。
它们可以与程序集,类,方法和字段一起使用,以及使用System.Reflection
将它们恢复的方式,并且类型稍有不同但基本相同。
它们不适合在类或属性中嵌入数据,因为没有一个适合它们的大小:每个属性都需要自己的类def和reader方法。