我开始了解自定义属性,对于经验丰富的用户我有一个问题:
我想将属性标记为具有属性的“TypeA”或“TypeB”,因此我可以使用反射来检查它们。只有一个属性是否更好,如下所示:
Public Class FlavourAttribute
Inherits Attribute
Private _flavour As Flavours
Public ReadOnly Property Flavour() As Flavours
Get
Return _flavour
End Get
End Property
Public Enum Flavours
Sweet = 0
Acid = 1
End Enum
Public Sub New(ByVal flavour As Flavours)
_flavour = flavour
End Sub
结束班
或者在没有状态的情况下使用两个属性更好:
Public Class SweetAttribute
Inherits Attribute
End Class
Public Class AcidAttribute
Inherits Attribute
End Class
我在问这两种方法的缺点,或者可能的替代方案。
谢谢!
答案 0 :(得分:1)
您的一般问题没有答案,但特定问题的答案是使用后者。某些东西是否甜味与其是否呈酸性无关,所以你在谈论不同的东西。另一方面,如果您处理相关(或互斥)属性,则它们应该属于一个属性。
答案 1 :(得分:0)
在使用自定义属性一段时间后,我会说我发现了一个很好的理由来优先选择单个属性与状态的单独属性:检查一个属性是否只有一个属性比检查更简单和可读性属性的属性。
按照问题中的示例,使用单独的属性,我们将:
For Each prop As PropertyInfo In MyTipe.GetProperties
thePropertyIsSweet= Attribute.IsDefined(prop , GetType(SweetAttribute))
thePropertyIsAcid= Attribute.IsDefined(prop , GetType(AcidAttribute))
Next
虽然对于具有状态的单个属性,我应首先检查属性是否具有该属性,然后从中转换属性对象并检索其两个属性。
我对这个推理有误吗?