ShouldSerialize メソッドと Reset メソッドによる既定値の定義
更新 : 2007 年 11 月
ShouldSerialize メソッドと Reset メソッドは、プロパティに単純な既定値がない場合に、このプロパティに指定できるオプションのメソッドです。プロパティに単純な既定値がある場合には、DefaultValueAttribute を適用して、属性クラス コンストラクタに既定値を指定します。ShouldSerialize メソッドまたは Reset メソッドを使用すると、次に示す機能がデザイナで有効になります。
プロパティの既定値が変更された場合、変更を示すマークがプロパティ ブラウザに表示されます。
プロパティの既定値に戻すには、ユーザーがプロパティを右クリックして、[リセット] をクリックします。
デザイナで、さらに効率的なコードが生成されます。
メモ : DefaultValueAttribute を適用するか、ResetPropertyName メソッドと ShouldSerializePropertyName メソッドを提供します。この 2 種類の操作を同時に実行しないでください。
次のコードに示すように、ResetPropertyName メソッドはプロパティに既定値を設定します。
Public Sub ResetMyFont()
MyFont = Nothing
End Sub
public void ResetMyFont() {
MyFont = null;
}
メモ : |
---|
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 メソッドを実装する必要があります。