次の方法で共有


ShouldSerialize メソッドと Reset メソッドによる既定値の定義

更新 : 2007 年 11 月

ShouldSerialize メソッドと Reset メソッドは、プロパティに単純な既定値がない場合に、このプロパティに指定できるオプションのメソッドです。プロパティに単純な既定値がある場合には、DefaultValueAttribute を適用して、属性クラス コンストラクタに既定値を指定します。ShouldSerialize メソッドまたは Reset メソッドを使用すると、次に示す機能がデザイナで有効になります。

  • プロパティの既定値が変更された場合、変更を示すマークがプロパティ ブラウザに表示されます。

  • プロパティの既定値に戻すには、ユーザーがプロパティを右クリックして、[リセット] をクリックします。

  • デザイナで、さらに効率的なコードが生成されます。

    53b8022e.alert_note(ja-jp,VS.90).gifメモ :

    DefaultValueAttribute を適用するか、ResetPropertyName メソッドと ShouldSerializePropertyName メソッドを提供します。この 2 種類の操作を同時に実行しないでください。

次のコードに示すように、ResetPropertyName メソッドはプロパティに既定値を設定します。

Public Sub ResetMyFont()
   MyFont = Nothing
End Sub
public void ResetMyFont() {
   MyFont = null;
}
53b8022e.alert_note(ja-jp,VS.90).gifメモ :

Reset メソッドがなく、DefaultValueAttribute が適用されておらず、宣言で既定値が指定されていないプロパティの場合、Visual Studio の Windows フォーム デザイナの [プロパティ] ウィンドウのショートカット メニューでは、このプロパティの Reset オプションが無効になります。

Visual Studio などのデザイナでは、ShouldSerializePropertyName メソッドを使用して、プロパティの既定値が変更されているかどうかを確認し、プロパティが変更されている場合にだけフォームにコードを書き込みます。これにより、コード生成処理の効率性が向上します。たとえば、次のようにします。

'Returns true if the font has changed; otherwise, returns false.
' The designer writes code to the form only if true is returned.
Public Function ShouldSerializeMyFont() As Boolean
   Return Not (thefont Is Nothing)
End Function
// Returns true if the font has changed; otherwise, returns false.
// The designer writes code to the form only if true is returned.
public bool ShouldSerializeMyFont() {
   return thefont != null;
}

完全なコード例を次に示します。

Option Explicit
Option Strict

Imports System
Imports System.Windows.Forms
Imports System.Drawing

Public Class MyControl
   Inherits Control
   
   ' Declare an instance of the Font class
   ' and set its default value to Nothing.
   Private thefont As Font = Nothing
   
   ' The MyFont property. 
   Public Property MyFont() As Font
      ' Note that the Font property never
      ' returns null.
      Get
         If Not (thefont Is Nothing) Then
            Return thefont
         End If
         If Not (Parent Is Nothing) Then
            Return Parent.Font
         End If
         Return Control.DefaultFont
      End Get
      Set
         thefont = value
      End Set
   End Property
   
   Public Function ShouldSerializeMyFont() As Boolean
      Return Not (thefont Is Nothing)
   End Function
   
   Public Sub ResetMyFont()
      MyFont = Nothing
   End Sub
End Class
using System;
using System.Windows.Forms;
using System.Drawing;

public class MyControl : Control {
   // Declare an instance of the Font class
   // and set its default value to null.
   private Font thefont = null;
  
   // The MyFont property.    
   public Font MyFont {
      // Note that the MyFont property never
      // returns null.
      get {
         if (thefont != null) return thefont;
         if (Parent != null) return Parent.Font;
         return Control.DefaultFont;
      }
      set {
         thefont = value;
      }
   }

   public bool ShouldSerializeMyFont() {
      return thefont != null;
   }
 
   public void ResetMyFont() {
      MyFont = null;
   }
}

この場合、MyFont プロパティがアクセスするプライベート変数の値が null であっても、プロパティ ブラウザには null は表示されません。その代わりに、親の Font プロパティ (null 以外の場合)、または Control で定義されている Font の既定値が表示されます。つまり、MyFont プロパティの既定値を簡単に設定できないため、このプロパティには DefaultValueAttribute を適用できません。代わりに、MyFont プロパティに対しては、ShouldSerialize メソッドと Reset メソッドを実装する必要があります。

参照

概念

Windows フォーム コントロールのプロパティの定義

プロパティ変更イベント

その他の技術情報

Windows フォーム コントロールのプロパティ