- 題名: 文字列型の列挙体
- 日時: 2013/05/11 13:24:13
- ID: 31512
- この記事の返信元:
- (なし)
- この記事への返信:
- [31513] Re[1]: 文字列型の列挙体2013/05/11 16:45:48
- [31520] Re[1]: 文字列型の列挙体2013/05/12 7:54:14 [解決]
- ツリーを表示
■No31512に返信(ぶいびーびーぶいびーさんの記事) > 「文字列の列挙体」 > http://blogs.wankuma.com/jeanne/archive/2006/04/04/22239.aspx > の記事を読みました。 えーっと、その記事の作成者です。 古くてレベルの低いお遊び記事で申し訳ないです。 そういうわけで一応責任とっておこうと思います。 その記事は見た目がマジック ストリングそのものだけど、 後で一斉に変更できたらなんていう局所的な目的のものです。 > Enum 型のメリットの一つとして、 > その値グループのうちのどれかを取りうることを明示できることがあると思います。 という目的なら素直に enum を使った上でカスタム属性に目的の「文字列」を定義して情報を拡張するとか、 (取得する時は拡張メソッドとの相性がよろしいです) あるいは... ご自身でも辿りついているようですが、 > Public MyFruit As String ' ←ここが String になる。 > String 型ではなくて、あるグループのうちのどれか、ということを明示できるような方法 Java の enum に近いようなクラスを自作すれば良いです。 (私は Java の enum が好きなのでこちら推し) これにはいくつかパターンがあると思います。 単純な例だと、たとえばこんな基底クラスを用意しておいて、 Public MustInherit Class CustomEnumBase(Of TKey, TValue) Private key As TKey Private value As TValue Public Sub New(ByVal key As TKey, ByVal value As TValue) MyClass.key = key MyClass.value = value End Sub Public Overrides Function ToString() As String Return MyClass.value.ToString() End Function End Class こんな風にメンバを定義します。 Public NotInheritable Class MyCoke Inherits CustomEnumBase(Of Integer, String) Public Shared ReadOnly Member1 As New MyCoke(1, "Pepsi NEX") Public Shared ReadOnly Member2 As New MyCoke(2, "Pepsi Special") Public Sub New(ByVal key As Integer, ByVal value As String) MyBase.New(key, value) End Sub End Class 比較などが必要な場合は別途 compare メソッドと演算子のオーバーロードを使うとそれっぽく見えるかと思います。 メンバの管理に Dictionary を使ったりすると、より簡単で強力なカスタム列挙型が作れるでしょう。
分類:[.NET]
「文字列の列挙体」
http://blogs.wankuma.com/jeanne/archive/2006/04/04/22239.aspx
の記事を読みました。
Enum 型のメリットの一つとして、
その値グループのうちのどれかを取りうることを明示できることがあると思います。
Enum Fruits
Apple
Banana
CCLemon
End Enum
Public MyFruit As Fruits
上記の場合、MyFruit は、Apple か Banana か CCLemon のどれかだとわかります。( 0 か 1 か 2)
ご投稿にあるリフレクションを利用した方法や、クラスの静的フィールドを利用する方法では、いずれも、このようなカテゴリ分けはできず、String 型として定義された変数にセットされることになると思います。
Public MyFruit As String ' ←ここが String になる。
String 型ではなくて、あるグループのうちのどれか、ということを明示できるような方法があれば、もっと Enum っぽさが出ると思うのですが、そういう観点からいい方法はないでしょうか?
あるカテゴリ Oyatsu
Ame
Banana
CCLemon
End カテゴリ
Public MyOyatsu As Oyatsu ' ← Oyatsu カテゴリに属することを明記できる
MyOyatsu は、Ame か Banana か CCLemon のどれかで、文字列型なんだな、とわかる方法があれば
より Enum の文字列版っぽくなると思うのですが。
質問だけで、何もアイデアがなくてすみません。
むしろ、こういう角度から探したら、ほかにもアイデアが湧くのでは、というアイデアだと思って下さいorz