8

方向列挙型があります:

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

それは機能し、「壊れていない場合は修正しないでください」が、間違っているかどうかを知りたいので、ボイラープレートを少なくしてより良い方法があります。たぶん.NET4で?

最後に、列挙型のように動作する構造を記述できることはわかっていますが、それはさらに逆に思えます。

4

2 に答える 2

7

これが、メソッド(の外観)を列挙型に追加する唯一の方法です。

C#では、拡張メソッドは静的クラスで定義されますが、これは些細な違いであり、主に命名法の1つであることに注意してください。

于 2010-10-27T05:13:32.263 に答える
1

その値を含むクラスのインスタンスを返す静的な読み取り専用プロパティがあるという意味で、列挙型のように動作するクラスを作成できます。

System.Drawing.Colorたとえば、構造はこのように機能します (ただし、内部値は列挙型ではありません) 。インスタンスのプロパティやメソッドだけでなく、Color.Redや などの静的プロパティもあります。Color.White

于 2010-10-27T05:20:45.233 に答える