Definizione dei valori predefiniti con i metodi ShouldSerialize e Reset
ShouldSerialize
e Reset
sono metodi facoltativi che è possibile fornire per una proprietà, se la proprietà non ha un valore predefinito semplice. Se la proprietà ha un valore predefinito semplice, è necessario applicare il DefaultValueAttribute e specificare invece il valore predefinito al costruttore della classe di attributi. Uno di questi meccanismi abilita le funzionalità seguenti nella finestra di progettazione:
La proprietà fornisce un'indicazione visiva nel browser delle proprietà se è stata modificata rispetto al suo valore predefinito.
L'utente può fare clic con il pulsante destro del mouse sulla proprietà e scegliere Reimposta per ripristinare il valore predefinito della proprietà.
Il designer genera codice più efficiente.
Nota
Applicare il DefaultValueAttribute o fornire i metodi Reset
PropertyName e ShouldSerialize
PropertyName. Non usare entrambi.
Quando si dichiara un metodo ShouldSerialize
o Reset
, usare il modificatore di accesso private
. Questi metodi vengono in genere richiamati dalla finestra di progettazione e non dal codice utente.
Il metodo Reset
PropertyName imposta una proprietà sul valore predefinito, come illustrato nel frammento di codice seguente.
Private Sub ResetMyFont()
MyFont = Nothing
End Sub
private void ResetMyFont()
{
MyFont = null;
}
Nota
Se una proprietà non dispone di un metodo Reset
, non è contrassegnata con un DefaultValueAttributee non dispone di un valore predefinito specificato nella dichiarazione, l'opzione Reset
per tale proprietà è disabilitata nel menu di scelta rapida nella finestra Proprietà della Progettazione dei Windows Form in Visual Studio.
Progettisti come Visual Studio usano il metodo ShouldSerialize
PropertyName per verificare se una proprietà è stata modificata rispetto al valore predefinito e scrivere il codice nel form solo se una proprietà è stata modificata, consentendo così una generazione di codice più efficiente. Per esempio:
'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;
}
Suggerimento
Se si desidera impedire in modo permanente la serializzazione di una proprietà dalla finestra di progettazione, aggiungere l'attributo
Di seguito è riportato un esempio di codice completo.
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;
}
}
In questo caso, anche quando il valore della variabile privata a cui si accede dalla proprietà MyFont
è null
, il browser delle proprietà non visualizza null
; Visualizza invece la proprietà Font dell'elemento padre, se non è null
o il valore Font predefinito definito in Control. Pertanto, il valore predefinito per MyFont
non può essere semplicemente impostato e non è possibile applicare un DefaultValueAttribute a questa proprietà. È invece necessario implementare i metodi ShouldSerialize
e Reset
per la proprietà MyFont
.
Vedere anche
.NET Desktop feedback