我有一个方向枚举:
Public Enum Direction
Left
Right
Top
Bottom
End Enum
有时我需要反过来,所以写起来似乎很好:
SomeDirection.Inverse()
但是我不能把一个方法放在枚举上!但是,我可以添加Extension Method(VS2008 +)。
在VB中,扩展方法must be inside Modules。我真的不喜欢那些模块,而且我正在尝试编写一个(适度)简单的类,我可以在一个文件中共享它以插入其他项目。
模块只能驻留在文件/命名空间级别,所以我现在在文件的底部有一个:
Public Class MyClass
'...'
End Class
Public Module Extensions
<Extension()> _
Public Function Inverse(ByVal dir As Direction) As Direction
'...'
End Function
End Module
它有效,并且“如果没有破坏,就不要修理它”,但我很想知道我做错了,并且有更好的方法,更少的样板。也许在.NET 4中?
最后,我知道我可以编写一个行为类似于枚举的结构,但这看起来更加倒退。
答案 0 :(得分:7)
这确实是向枚举添加(外观)方法的唯一方法。
请注意,在C#中,扩展方法将在静态类上定义,但这是一个微不足道的差异,主要是命名法之一。
答案 1 :(得分:1)
你可以创建一个类似于枚举的类,因为它具有静态只读属性,返回包含该值的类的实例。
例如,System.Drawing.Color
结构以这种方式工作(尽管内部值不是枚举);它具有静态属性,如Color.Red
和Color.White
,以及实例属性和方法。