2014-01-13 2 views
0

Я начинаю узнавать о пользовательских атрибутах и ​​у меня есть один вопрос для более опытных пользователей:Используйте один атрибут с государственными или двумя атрибутами без состояния

Я хочу, чтобы отметить свои свойства, как «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 

End Class

Или лучше использовать два атрибута без государства:

Public Class SweetAttribute 
    Inherits Attribute 
End Class 

Public Class AcidAttribute 
    Inherits Attribute 
End Class 

Я спрашиваю о недостатки этих двух подходов или возможные альтернативы.

Спасибо!

ответ

1

Там не ответ на общей вопрос, но ответ на ваш конкретной вопрос будет использовать последний. Независимо от того, сладко ли это, независимо от того, является ли оно кислым, вы говорите о разных вещах. Если, с другой стороны, вы имеете дело со связанными (или взаимоисключающими) свойствами, они должны быть по одному атрибуту.

0

После некоторого времени игры с пользовательскими атрибутами я бы сказал, что я нашел хорошую причину, чтобы отделить отдельные атрибуты от одного отдельного атрибута с состоянием: гораздо проще и легко проверить, есть ли у одного свойства один атрибут, чем проверяя свойство атрибута.

После с примером в вопросе, с отдельными признаками, мы имели бы:

For Each prop As PropertyInfo In MyTipe.GetProperties 
    thePropertyIsSweet= Attribute.IsDefined(prop , GetType(SweetAttribute)) 
    thePropertyIsAcid= Attribute.IsDefined(prop , GetType(AcidAttribute)) 
Next 

В то время как с помощью одного атрибута с состоянием я должен сначала проверить, если свойство имеет его, затем бросьте объект атрибута из он и извлекает два своих свойства.

Я ошибаюсь в этом рассуждении?

Смежные вопросы