使用具有状态的一个属性或没有状态的两个属性

时间:2014-01-13 17:22:52

标签: vb.net attributes

我开始了解自定义属性,对于经验丰富的用户我有一个问题:

我想将属性标记为具有属性的“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

我在问这两种方法的缺点,或者可能的替代方案。

谢谢!

2 个答案:

答案 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

虽然对于具有状态的单个属性,我应首先检查属性是否具有该属性,然后从中转换属性对象并检索其两个属性。

我对这个推理有误吗?