Definování výchozích hodnot pomocí metod ShouldSerialize a Reset

ShouldSerialize a Reset jsou volitelné metody, které můžete zadat pro vlastnost, pokud vlastnost nemá jednoduchou výchozí hodnotu. Pokud vlastnost má jednoduchou výchozí hodnotu, měli byste použít DefaultValueAttribute a zadat výchozí hodnotu do konstruktoru třídy atributu. Některý z těchto mechanismů umožňuje v návrháři následující funkce:

  • Tato vlastnost poskytuje vizuální označení v prohlížeči vlastností, pokud byla změněna z výchozí hodnoty.

  • Uživatel může kliknout pravým tlačítkem myši na vlastnost a zvolit Obnovit obnovit vlastnost na výchozí hodnotu.

  • Návrhář generuje efektivnější kód.

Poznámka:

Buď použijte DefaultValueAttribute nebo zadejte ResetPropertyName a ShouldSerializePropertyName metody. Nepoužívejte obojí.

Při deklarování ShouldSerialize metody nebo Reset metody použijte private modifikátor přístupu. Tyto metody jsou obvykle vyvolány návrhářem, a ne uživatelským kódem.

Metoda ResetPropertyName nastaví vlastnost na výchozí hodnotu, jak je znázorněno v následujícím fragmentu kódu.

Private Sub ResetMyFont()
   MyFont = Nothing
End Sub
private void ResetMyFont()
{
   MyFont = null;
}

Poznámka:

Pokud vlastnost nemá metoduReset, není označena DefaultValueAttributea nemá výchozí hodnotu zadanou v jeho deklaraci, Reset možnost pro tuto vlastnost je zakázána v místní nabídce okna Vlastnosti návrháře model Windows Forms v sadě Visual Studio.

Návrháři, jako je Visual Studio, používají Metodu ShouldSerializePropertyName ke kontrole, zda se vlastnost změnila z výchozí hodnoty, a napsat kód do formuláře pouze v případě, že je vlastnost změněna, což umožňuje efektivnější generování kódu. Příklad:

'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;
}

Tip

Pokud chcete trvale zabránit serializaci vlastnosti návrhářem, přidejte DesignerSerializationVisibility atribut s hodnotou Hidden.

Následuje kompletní příklad kódu.

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;
   }
}

V tomto případě i v případě, že hodnota privátní proměnné přístupná MyFont vlastností je null, prohlížeč vlastností nezobrazí null; místo toho zobrazí Font vlastnost nadřazeného objektu, pokud není null, nebo výchozí Font hodnota definovaná v Control. Výchozí hodnotu pro MyFont nelze jednoduše nastavit a DefaultValueAttribute nelze ji použít pro tuto vlastnost. ShouldSerialize Místo toho musí být pro vlastnost implementovány MyFont metodyReset.

Viz také