8

我有一个方向枚举:

Public Enum Direction
    Left
    Right
    Top
    Bottom
End Enum

有时我需要得到相反的结果,所以写起来看起来不错:

SomeDirection.Inverse()

但是我不能在枚举上放一个方法!但是,我可以向它添加一个扩展方法(VS2008+)。

在 VB 中,扩展方法必须在 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 中?

最后,我知道我可以编写一个行为类似于枚举的结构,但这似乎更加倒退。

4

2 回答 2

7

这确实是向枚举添加(外观)方法的唯一方法。

请注意,在 C# 中,扩展方法将在静态类上定义,但这是一个微不足道的区别,主要是命名法之一。

于 2010-10-27T05:13:32.263 回答
1

您可以创建一个行为类似于枚举的类,因为它具有静态只读属性,这些属性返回包含该值的类的实例。

例如,该System.Drawing.Color结构以这种方式工作(尽管内部值不是枚举);它具有像Color.Redand之类的静态属性Color.White,以及实例属性和方法。

于 2010-10-27T05:20:45.233 回答