ShouldSerialize メソッドと Reset メソッドによる既定値の定義
ShouldSerialize
と Reset
は、プロパティに単純な既定値がない場合にプロパティに指定できる省略可能なメソッドです。 プロパティに単純な既定値がある場合は、代わりに DefaultValueAttribute を適用し、既定値を属性クラス コンストラクターに指定する必要があります。 これらのメカニズムのいずれかにより、デザイナーで次の機能が有効になります。
プロパティが既定値から変更されている場合は、プロパティ ブラウザーに視覚的に表示されます。
プロパティを右クリックし、 [リセット] を選択すると、プロパティを既定値に戻すことができます。
デザイナーを使用すると、より効率的なコードが生成されます。
注意
DefaultValueAttribute を適用するか、Reset
PropertyName および ShouldSerialize
PropertyName メソッドを指定します。 両方を使用しないでください。
ShouldSerialize
または Reset
メソッドを宣言するときは、private
アクセス修飾子を使用します。 これらのメソッドは、通常、ユーザー コードではなく、デザイナーから呼び出されます。
Reset
PropertyName メソッドを使用すると、次のコード フラグメントに示すように、プロパティが既定値に設定されます。
Private Sub ResetMyFont()
MyFont = Nothing
End Sub
private void ResetMyFont()
{
MyFont = null;
}
Note
プロパティに Reset
メソッドがなく、DefaultValueAttribute でマークされておらず、宣言で既定値が指定されていない場合、Visual Studio の Windows フォーム デザイナーの プロパティ ウィンドウのショートカット メニューで、そのプロパティの Reset
オプションが無効になります。
Visual Studio などのデザイナーにより、ShouldSerialize
PropertyName メソッドを使用してプロパティが既定値から変更されているかどうかが確認され、プロパティが変更された場合にのみフォームにコードが書き込まれるため、コード生成がより効率的になります。 次に例を示します。
'Returns true if the font has changed; otherwise, returns false.
' The designer writes code to the form only if true is returned.
Private Function ShouldSerializeMyFont() As Boolean
Return thefont IsNot 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.
private bool ShouldSerializeMyFont()
{
return thefont != null;
}
ヒント
プロパティがデザイナーによってシリアル化されないようにする場合は、DesignerSerializationVisibility 属性に値 Hidden
を追加します。
完全なコード例を次に示します。
Option Explicit
Option Strict
Imports System.Drawing
Imports System.Windows.Forms
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
Private Function ShouldSerializeMyFont() As Boolean
Return thefont IsNot Nothing
End Function
Private Sub ResetMyFont()
MyFont = Nothing
End Sub
End Class
using System;
using System.Drawing;
using System.Windows.Forms;
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;
}
}
private bool ShouldSerializeMyFont()
{
return thefont != null;
}
private void ResetMyFont()
{
MyFont = null;
}
}
この例では、MyFont
プロパティによってアクセスされるプライベート変数の値が null
の場合でも、プロパティ ブラウザーに null
が表示されません。null
でない場合は親の Font プロパティ、それ以外の場合は Control に定義されている既定の Font 値が表示されます。 そのため、MyFont
の既定値を単純に設定することはできません。また、DefaultValueAttribute をこのプロパティに適用することもできません。 代わりに、ShouldSerialize
および Reset
メソッドを MyFont
プロパティに対して実装する必要があります。
関連項目
.NET Desktop feedback