2010年1月27日水曜日

.NET 定数ファイルを作成する ~その4~ インテリセンスに候補を表示する

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

列挙体に文字列を持たせたいときに、クラスに定数メンバを並べて代用しています。

Namespace Constant

    ''' <summary>
    ''' 曜日
    ''' </summary>
    Public NotInheritable Class WeekDayType : Inherits ConstantItem

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

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

    End Class
End Namespace

Namespace Constant

    ''' <summary>
    ''' 定数アイテムの基底クラスです。
    ''' </summary>
    Public MustInherit Class ConstantItem

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

        ''' <summary>コード</summary>
        Protected _iCd As Integer
        ''' <summary>名前</summary>
        Protected _sName As String
        ''' <summary>別名</summary>
        Protected _sAliasName As String

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

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

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

        ''' <summary>引数を取らないコンストラクタ</summary>
        Private Sub New()
        End Sub
        ''' <summary>コードと名前を引数に取るコンストラクタ</summary>
        Public Sub New(ByVal cd As Integer, ByVal name As String)
            MyBase.New()
            Me._iCd = cd
            Me._sName = name
        End Sub
        ''' <summary>コードと名前と別名を引数に取るコンストラクタ</summary>
        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

使用方法は以下のようになります。
Dim w As Constant.WeekDayType = Constant.WeekDayType.Fri

しかし列挙体であれば「=」を入力した時点でインテリセンスに候補がでますが、


自作のクラスでは「 Constant.WeekDayType.」まで入力しないとインテリセンスに候補が表示されません。



けれどSystem.Drawing.Color構造体は列挙体と同じように「=」を入力した時点で、Public Sharedなメンバがインテリセンスの候補に表示されます。




System.Drawing.Color構造体と同じようにWeekDayTypeクラスも「=」を入力した時点でインテリセンスに候補が表示されるように変更します。
WeekDayTypeクラスに <completionlist cref="クラス名"/> をつけるだけです。
Namespace Constant

    ''' <summary>
    ''' 曜日
    ''' </summary>
    ''' <completionlist cref="WeekDayType"/>
    Public NotInheritable Class WeekDayType : Inherits ConstantItem

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

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

    End Class
End Namespace
これで
Dim w As Constant.WeekDayType = の「=」を入力した時点でインテリセンスに候補が表示されるようになります。


0 件のコメント: