【VB.NET】「区分オブジェクト」のようなクラスを作れないか試行錯誤
前回の「区分オブジェクト」に関する投稿に引き続いて関連した投稿を。
列挙型の区分ごとにプロパティを持たせる事ができないかなと思い、
実装してみたのが以下のような抽象クラスと具象クラスを使う形式。
Public MustInherit Class Perfume Public ReadOnly Property myFavorite As Boolean Sub New(myFavorite As Boolean) Me.myFavorite = myFavorite End Sub Public Class Nocchi Inherits Perfume Sub New(myFavorite As Boolean) MyBase.New(myFavorite) End Sub End Class Public Class Kashiyuka Inherits Perfume Sub New(myFavorite As Boolean) MyBase.New(myFavorite) End Sub End Class Public Class AaChan Inherits Perfume Sub New(myFavorite As Boolean) MyBase.New(myFavorite) End Sub End Class End Class
クラス名からインスタンスを生成するにはActivator.CreateInstance
、
区分の判定はGetType
で列挙型と同様に行えます。
Module Module1 Sub Main() Dim myPerfume = createMyFavoriteMember("Nocchi") Select Case myPerfume.GetType() Case GetType(Perfume.Nocchi) ' ... Case GetType(Perfume.Kashiyuka) ' ... Case GetType(Perfume.AaChan) ' ... End Select End Sub Private Function createMyFavoriteMember(memberName As String) As Perfume Return CType(Activator.CreateInstance( Type.GetType("Enumeration.Perfume+" & memberName), New Object() {True}), Perfume) End Function End Module
実行すると以下のようになります。
うーん・・・具象クラスのコンストラクタを全部書く必要があるのと、
Activator.CreateInstance
でType名をセットする部分があまりイケてない感じがする・・・