Reset と ShouldSerialize を使用してプロパティを制御する (Windows フォーム .NET)

この記事では、Reset<PropertyName> メソッドと ShouldSerialize<PropertyName> メソッドを作成して、Visual Studio で [プロパティ] ウィンドウのプロパティを管理する方法について説明します。 ResetShouldSerialize は、プロパティに単純な既定値がない場合にプロパティに指定できる省略可能なメソッドです。 プロパティに単純な既定値がある場合は、代わりに DefaultValueAttribute を適用し、既定値を属性クラス コンストラクターに指定する必要があります。 これらのメカニズムのいずれかにより、デザイナーで次の機能が有効になります。

  • プロパティが既定値から変更されている場合は、プロパティ ブラウザーに視覚的に表示されます。
  • プロパティを右クリックし、 [リセット] を選択すると、プロパティを既定値に戻すことができます。
  • デザイナーを使用すると、より効率的なコードが生成されます。

プロパティの詳細については、「Reset と ShouldSerialize」を参照してください。

サポート コード

この記事では、コンパス ローズ コントロールを作成することで Reset メソッドと ShouldSerialize メソッドを示します。 独自のユーザー コントロールを使用している場合は、このセクションをスキップできます。

  1. コードに次の列挙を追加します。

    public enum Directions
    {
        None,
        North,
        NorthEast,
        East,
        SouthEast,
        South,
        SouthWest,
        West,
        NorthWest,
    }
    
    Public Enum Directions
        None
        North
        NorthEast
        East
        SouthEast
        South
        SouthWest
        West
        NorthWest
    End Enum
    
  2. CompassRose という名前のユーザー コントロールを追加します。

  3. Directions 型の Direction という名前のプロパティを、ユーザー コントロールに追加します。

    public Directions Direction { get; set; } = Directions.None;
    
    Public Property Direction As Directions = Directions.None
    

リセット

Reset<PropertyName> メソッドは、対応する <PropertyName> プロパティを既定値にリセットします。

次のコードでは、Direction プロパティが None にリセットされます。これはコンパス ローズ コントロールの既定値と見なされます。

private void ResetDirection() =>
    Direction = Directions.None;
Private Sub ResetDirection()
    Direction = Directions.None
End Sub

ShouldSerialize

ShouldSerialize<PropertyName> メソッドが返すブール値は、バッキング プロパティが既定値から変更され、そのプロパティをデザイナーのコードにシリアル化する必要があるかどうかを示します。

次のコードは、Direction プロパティが None と等しくない場合に true を返します。これは方向が選択されたことを示します。

private bool ShouldSerializeDirection() =>
    Direction != Directions.None;
Private Function ShouldSerializeDirection() As Boolean
    Return Direction <> Directions.None
End Function

次のコードは、Direction プロパティの Reset メソッドと ShouldSerialize メソッドを示しています。

public partial class CompassRose : UserControl
{
    public Directions Direction { get; set; } = Directions.None;

    public CompassRose() =>
        InitializeComponent();

    private void ResetDirection() =>
        Direction = Directions.None;

    private bool ShouldSerializeDirection() =>
        Direction != Directions.None;
}
Public Class CompassRose

    Public Property Direction As Directions = Directions.None

    Private Sub ResetDirection()
        Direction = Directions.None
    End Sub

    Private Function ShouldSerializeDirection() As Boolean
        Return Direction <> Directions.None
    End Function

End Class