Definieren von Standardwerten mit der ShouldSerialize-Methode und der Reset-MethodeDefining Default Values with the ShouldSerialize and Reset Methods

ShouldSerializeund Reset sind optionale Methoden, die Sie für eine-Eigenschaft bereitstellen können, wenn die-Eigenschaft keinen einfachen Standardwert hat.ShouldSerialize and Reset are optional methods that you can provide for a property, if the property does not a have simple default value. Wenn die Eigenschaft über einen einfachen Standardwert verfügt, sollten Sie den DefaultValueAttribute anwenden und stattdessen den Standardwert für den attributklassenkonstruktor angeben.If the property has a simple default value, you should apply the DefaultValueAttribute and supply the default value to the attribute class constructor instead. Beide Mechanismen ermöglichen die folgenden Funktionen im Designer:Either of these mechanisms enables the following features in the designer:

  • Die-Eigenschaft stellt im Eigenschaften Browser eine visuelle Anzeige dar, wenn Sie von ihrem Standardwert geändert wurde.The property provides visual indication in the property browser if it has been modified from its default value.

  • Der Benutzer kann mit der rechten Maustaste auf die Eigenschaft klicken und Zurücksetzen auswählen, um die Eigenschaft auf den Standardwert wiederherzustellen.The user can right-click on the property and choose Reset to restore the property to its default value.

  • Der Designer generiert effizienteren Code.The designer generates more efficient code.

    Hinweis

    Wenden Sie entweder DefaultValueAttribute an, Resetoder stellen Sie die ShouldSerializeMethoden propertyName und propertyName bereit.Either apply the DefaultValueAttribute or provide ResetPropertyName and ShouldSerializePropertyName methods. Verwenden Sie nicht beides.Do not use both.

Mit Resetder propertyName -Methode wird eine Eigenschaft auf ihren Standardwert festgelegt, wie im folgenden Code Fragment dargestellt.The ResetPropertyName method sets a property to its default value, as shown in the following code fragment.

Public Sub ResetMyFont()
   MyFont = Nothing
End Sub
public void ResetMyFont() {
   MyFont = null;
}

Hinweis

Wenn eine Eigenschaft nicht über Reset eine-Methode verfügt, nicht mit einem DefaultValueAttributegekennzeichnet ist und in der Deklaration kein Standardwert angegeben ist, wird die Reset Option für diese Eigenschaft im Kontextmenü des Eigenschaften Fensters von deaktiviert. der Windows Forms-Designer in Visual Studio.If a property does not have a Reset method, is not marked with a DefaultValueAttribute, and does not have a default value supplied in its declaration, the Reset option for that property is disabled in the shortcut menu of the Properties window of the Windows Forms Designer in Visual Studio.

Designer wie Visual Studio verwenden die ShouldSerialize propertyName -Methode, um zu überprüfen, ob sich eine Eigenschaft von ihrem Standardwert geändert hat, und schreiben Code nur in das Formular, wenn eine Eigenschaft geändert wird, was eine effizientere Codegenerierung ermöglicht.Designers such as Visual Studio use the ShouldSerializePropertyName method to check whether a property has changed from its default value and write code into the form only if a property is changed, thus allowing for more efficient code generation. Beispiel:For example:

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

Ein umfassendes Codebeispiel folgt.A complete code example follows.

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

In diesem Fall wird der Eigenschaften Browser nicht angezeigt, auch wenn der Wert der MyFont privaten Variablen, auf die von der-Eigenschaft nullzugegriffen wird, nicht angezeigt wird Font null. stattdessen wird die-Eigenschaft des übergeordneten nullElements angezeigt, wenn dies nicht der Fall ist. oder der Standard Font Wert, der Controlin definiert ist.In this case, even when the value of the private variable accessed by the MyFont property is null, the property browser does not display null; instead, it displays the Font property of the parent, if it is not null, or the default Font value defined in Control. Daher kann der Standardwert MyFont für nicht einfach festgelegt werden, DefaultValueAttribute und ein kann nicht auf diese Eigenschaft angewendet werden.Thus the default value for MyFont cannot be simply set, and a DefaultValueAttribute cannot be applied to this property. Stattdessen müssen die ShouldSerialize - Reset Methode und die-Methode für MyFont die-Eigenschaft implementiert werden.Instead, the ShouldSerialize and Reset methods must be implemented for the MyFont property.

Siehe auchSee also