Condividi tramite


Definizione dei valori predefiniti utilizzando i metodi ShouldSerialize e Reset

Aggiornamento: novembre 2007

ShouldSerialize e Reset sono metodi facoltativi che è possibile fornire per una proprietà, se tale proprietà non presenta un valore predefinito semplice. Se la proprietà presenta un valore predefinito semplice, sarà necessario applicare DefaultValueAttribute e fornire invece il valore predefinito al costruttore della classe Attribute. Entrambi questi meccanismi consentono di avvalersi, all'interno della finestra di progettazione, delle seguenti caratteristiche:

  • La proprietà fornisce un'indicazione visiva nel visualizzatore proprietà se sono state apportate modifiche rispetto al valore predefinito.

  • È possibile fare clic con il pulsante destro del mouse sulla proprietà e scegliere Reimposta per ripristinare il valore predefinito della proprietà.

  • La finestra di progettazione genera codice più efficiente.

    Nota:

    Applicare DefaultValueAttribute oppure fornire i metodi ResetNomeProprietà e ShouldSerializeNomeProprietà. Non effettuare entrambe le operazioni.

Il metodo ResetNomeProprietà imposta una proprietà sul relativo valore predefinito, come illustrato nel frammento di codice riportato di seguito.

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

Se una proprietà non dispone di un metodo Reset, non è associata a un DefaultValueAttribute e non presenta un valore predefinito nella propria dichiarazione, l'opzione Reset per tale proprietà risulta disattivata nel menu di scelta rapida della finestra Proprietà di Progettazione Windows Form in Visual Studio.

Le finestre di progettazione quali Visual Studio utilizzano il metodo ShouldSerializeNomeProprietà per verificare se una proprietà è stata modificata rispetto al valore predefinito e per scrivere codice nel form solo in caso di modifica, consentendo in tal modo una generazione del codice più efficiente. Esempio:

'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.

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 se il valore della variabile privata a cui accede la proprietà MyFont è null, nel Visualizzatore proprietà non viene riportato il valore null, ma la proprietà Font del padre, se non è null, o il valore Font predefinito specificato in Control. Non è pertanto possibile impostare semplicemente il valore predefinito di MyFont né applicare un DefaultValueAttribute a questa proprietà. È invece necessario implementare i metodi ShouldSerialize e Reset per la proprietà MyFont.

Vedere anche

Concetti

Definizione di una proprietà nei controlli Windows Form

Eventi per proprietà modificate

Altre risorse

Proprietà dei controlli Windows Form