VB のたまご

作成日: 2018/11/06, 更新日: 2018/11/06


属性

  • この投稿は Visual Basic Advent Calendar 2018 の 5 日目の記事です。
    ・ 4 日目の記事: デザイン時アーキテクチャ基礎
    ・ 6 日目の記事: デザイナ

  •  画面デザイン時アーキテクチャでは、属性を必ずと言っていいほど使います。 NUnit や MSTest でもよく使っていますね。コントロールにメタな情報を追加することができます。 今回であれば、プロパティウィンドウ(正確には PropertyGrid, 画面デザイン上で選択したコントロールに関するプロパティやイベントを表示するコントロール)に対する機能を付与します。

  •  例えばこういうのです。
  • Imports System.ComponentModel ' 属性用
    
    Public Class ButtonEx
        Inherits Button
    
        <Category("サンプル")>
        <Description("Text3 の説明文です。")>
        <DefaultValue("text3")>
        Public Property Text3 As String = "text3"
    
        <Browsable(False)>
        Public Property Text4 As String
    
    End Class
    

    イメージ
  •  上記の属性は、プロパティウィンドウに表示する際、機能の種類別にカテゴリ分けしたい場合に使用する Category 属性、メンバーの説明文を表示する Description 属性、 入力値が初期値かどうかを判断する DefaultValue 属性、プロパティウィンドウには表示したくない場合に隠す Browsable 属性です。

  •  DefaultValue 属性と、実際にプロパティにセットした初期値の違いが分かりづらいですね。 DefaultValue 属性にセットした初期値は、詳しくは規定値になります。例えばこのサンプルだと、入力文字列が text3 の場合は特に変化はないのですが、それ以外の文字列を入力した場合文字列が太字に変化します(プロパティウィンドウ上で)。

  •  以降で出てきますが、属性はプロパティやメソッド等のメンバーに付与できるだけではなく、クラスにも付与することができます。 いづれも、その機能に関するメタ機能を付与することが目的となります、今はまだよくわからなくて大丈夫です。