2009年10月22日木曜日

.NET 定数ファイルを作成する~その3~

定数ファイルを作成する~その3~

定数ファイルを作成する~その1~
定数ファイルを作成する~その2~

改良して、今はこんな感じで落ち着いてます。


定数アイテムリストの基底クラスです。
Namespace Constant
    
    Public MustInherit Class ConstItemBase

        '-----フィールド-----

        'コード
        Private _iCd As Integer
        '名前
        Private _sName As String
        '別名
        Private _sAliasName As String

        '-----Publicプロパティ-----

        'コードを取得します
        Public ReadOnly Property Cd() As Integer
            Get
                Return Me._iCd
            End Get
        End Property
        '名前を取得します
        Public ReadOnly Property Name() As String
            Get
                Return Me._sName
            End Get
        End Property
        '別名を取得します
        Public ReadOnly Property AliasName() As String
            Get
                Return Me._sAliasName
            End Get
        End Property

        '-----コンストラクタ-----
        
        '引数を取らないコンストラクタ
        Private Sub New()
        End Sub
        
        'コードと名前を引数に取るコンストラクタ
        Public Sub New(ByVal cd As Integer, ByVal name As String)
            Me._iCd = cd
            Me._sName = name
        End Sub
        
        'コードと名前と別名を引数に取るコンストラクタ
        Public Sub New(ByVal cd As Integer, ByVal name As String, ByVal aliasname As String)
            Me.New(cd, name)
            Me._sAliasName = aliasname
        End Sub

    End Class
End Namespace

定数リストを検索するためのフィルタクラスです。
Namespace Constant
    Friend Class ConstItemFilter(Of TValue)

        '-----インスタンス変数-----

        '検索する値です  
        Private _FilterValue As TValue

        '-----コンストラクタ-----

        'コンストラクタ  
        Public Sub New(ByVal filterValue As TValue)
            Me._FilterValue = filterValue
        End Sub

        '-----メソッド-----

        '引数に指定した定数アイテムのCDと検索値が一致するかを取得します。  
        Public Function IsMatchCd(ByVal item As ConstItemBase) As Boolean
            If (Me._FilterValue Is Nothing) Then Return False
            Return (Me._FilterValue.Equals(item.Cd))
        End Function

    End Class
End Namespace

曜日をあらわす定数アイテムリストです
Namespace Constant

    Public NotInheritable Class WeekDayKbn : Inherits ConstItemBase
        Private Shared _items As New List(Of WeekDayKbn)

        Public Shared ReadOnly Sun As New WeekDayKbn(1, "日曜日", "日")
        Public Shared ReadOnly Mon As New WeekDayKbn(2, "月曜日", "月")
        Public Shared ReadOnly Tue As New WeekDayKbn(3, "火曜日", "火")
        Public Shared ReadOnly Wed As New WeekDayKbn(4, "水曜日", "水")
        Public Shared ReadOnly Thr As New WeekDayKbn(5, "木曜日", "木")
        Public Shared ReadOnly Fri As New WeekDayKbn(6, "金曜日", "金")
        Public Shared ReadOnly Sat As New WeekDayKbn(7, "土曜日", "土")

        Private Sub New(ByVal cd As Integer, ByVal name As String, ByVal aliasname As String)
            MyBase.new(cd, name, aliasname)
            _items.Add(Me)
        End Sub

        Public Shared Function GetValues() As List(Of KinshuCd)
            Return _items
        End Function

        Public Shared Function GetItem(ByVal cd As Integer) As KinshuCd
            Dim filter As New ConstItemFilter(Of Integer)(cd)
            Return _items.Find(AddressOf filter.IsMatchCd)
        End Function
        
    End Class
End Namespace

実際の使用方法
'月曜日の別名をラベルに表示
Me.Label1.Text = Constant.WeekDayKbn.Mon.AliasName

'曜日コード1に該当する曜日名をラベルに表示
Me.Label1.Text = Constant.WeekDayKbn.GetItem(1).Name

'コンボボックスのデータソースに設定
Me.ComboBox1.ValueMember = "Cd"
Me.ComboBox1.DisplayMember = "Name"
Me.ComboBox1.DataSouce = Constant.WeekDayKbn.GetValues

1 件のコメント:

匿名 さんのコメント...

kuriboさん、こんばんは♪
突然ですが、bloggerに広告(Adsense以外)を載せたいときは、どうしたらいいでしょうか?
テンプレートからHTMLを編集するんでしょうか?
初コメントで、突然の質問で失礼かもしれないですが、いろいろ調べてもわからなくて。。。