У меня есть направление Enum:
Public Enum Direction
Left
Right
Top
Bottom
End Enum
И иногда мне нужно получить обратное, поэтому, кажется, приятно написать:
SomeDirection.Inverse()
Но я не могу поместить метод в перечисление! Тем не менее, я могу добавить метод расширения (VS2008 +) к нему.
В VB методы расширения должны быть внутри модулей . Мне действительно не очень нравятся модули, и я пытаюсь написать (умеренно) простой класс, которым я могу поделиться в одном файле для подключения к другим проектам.
Модули могут находиться только на уровне файла / пространства имен, поэтому у меня есть один внизу файла:
Public Class MyClass
'...'
End Class
Public Module Extensions
<Extension()> _
Public Function Inverse(ByVal dir As Direction) As Direction
'...'
End Function
End Module
Это работает, и "если это не сломано, не чините это", но я хотел бы знать, если я делаю это неправильно, и есть лучший способ с меньшим количеством шаблонов. Может быть, в .NET 4?
Наконец, я знаю, что мог бы написать структуру, которая ведет себя как перечисление, но это кажется еще более задом наперед.