Definizione dei valori predefiniti utilizzando i metodi ShouldSerialize e ResetDefining Default Values with the ShouldSerialize and Reset Methods

ShouldSerializee Reset sono metodi facoltativi che è possibile fornire per una proprietà, se la proprietà non dispone di un valore predefinito semplice.ShouldSerialize and Reset are optional methods that you can provide for a property, if the property does not a have simple default value. Se la proprietà ha un valore predefinito semplice, è necessario applicare DefaultValueAttribute e fornire il valore predefinito al costruttore della classe Attribute.If the property has a simple default value, you should apply the DefaultValueAttribute and supply the default value to the attribute class constructor instead. Uno di questi meccanismi Abilita le funzionalità seguenti nella finestra di progettazione:Either of these mechanisms enables the following features in the designer:

  • La proprietà fornisce un'indicazione visiva nel Visualizzatore proprietà se è stata modificata rispetto al valore predefinito.The property provides visual indication in the property browser if it has been modified from its default value.

  • L'utente può fare clic con il pulsante destro del mouse sulla proprietà e scegliere Reimposta per ripristinare il valore predefinito della proprietà.The user can right-click on the property and choose Reset to restore the property to its default value.

  • La finestra di progettazione genera codice più efficiente.The designer generates more efficient code.

    Nota

    Applicare o fornire DefaultValueAttribute Reseti metodi PropertyName e ShouldSerialize PropertyName .Either apply the DefaultValueAttribute or provide ResetPropertyName and ShouldSerializePropertyName methods. Non usare entrambi.Do not use both.

Il Resetmetodo PropertyName imposta una proprietà sul relativo valore predefinito, come illustrato nel frammento di codice seguente.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;
}

Nota

Se una proprietà non dispone di un Reset metodo, non è contrassegnata con DefaultValueAttributeun oggetto e non dispone di un valore predefinito specificato nella relativa dichiarazione, Reset l'opzione per tale proprietà è disabilitata nel menu di scelta rapida della finestra Proprietà di Progettazione Windows Form 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.

Le finestre di progettazione, ad esempio ShouldSerializeVisual Studio, usano il metodo PropertyName per verificare se una proprietà è cambiata rispetto al valore predefinito e scrivere codice nel form solo se una proprietà viene modificata, consentendo così una generazione di codice più efficiente.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. Ad esempio: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;
}

Di seguito è riportato un esempio di codice completo.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 questo caso, anche quando il valore della variabile privata a cui si accede MyFont tramite la nullproprietà è, il Visualizzatore proprietà non nullviene visualizzato; in caso contrario Font , Visualizza la proprietà dell'elemento padre, in nullcaso contrario. o il valore Font predefinito definito in Control.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. Pertanto, il valore predefinito MyFont di non può essere semplicemente impostato e DefaultValueAttribute non è possibile applicare un oggetto a questa proprietà.Thus the default value for MyFont cannot be simply set, and a DefaultValueAttribute cannot be applied to this property. Al contrario, ShouldSerialize è Reset necessario implementare i metodi e per MyFont la proprietà.Instead, the ShouldSerialize and Reset methods must be implemented for the MyFont property.

Vedere ancheSee also