Definir valores predeterminados con los métodos ShouldSerialize y Reset
ShouldSerialize y Reset son métodos opcionales que se pueden proporcionar para una propiedad que no posea un valor predeterminado simple. Si la propiedad posee un valor predeterminado simple, se debe aplicar el atributo DefaultValueAttribute y proporcionar el valor predeterminado al constructor de clases de atributos en su lugar. Cualquiera de estos mecanismos habilita las siguientes características en el diseñador:
La propiedad ofrece una indicación visual en el explorador de propiedades si se ha modificado su valor predeterminado.
El usuario puede hacer clic con el botón secundario del mouse en la propiedad y elegir Restablecer para restablecer el valor predeterminado de la propiedad.
El diseñador genera código más eficiente.
Nota
Aplique DefaultValueAttribute o proporcione los métodos ResetnombreDePropiedad y ShouldSerializenombreDePropiedad. No utilice ambos.
El método ResetnombreDePropiedad establece una propiedad en su valor predeterminado, como se muestra en el fragmento de código siguiente.
Public Sub ResetMyFont()
MyFont = Nothing
End Sub
public void ResetMyFont() {
MyFont = null;
}
Nota
Si una propiedad no posee un método Reset, no está marcada con un atributo DefaultValueAttribute y no se le ha asignado un valor predeterminado en su declaración, la opción Reset de dicha propiedad estará deshabilitada en el menú contextual de la ventana Propiedades del Diseñador de Windows Forms de Visual Studio.
Los diseñadores como Visual Studio utilizan el método ShouldSerializenombreDePropiedad para comprobar si una propiedad ha cambiado respecto a su valor predeterminado, escribir código en el formulario únicamente si ha cambiado la propiedad y, de esta manera, permitir una generación de código más eficiente. Por ejemplo:
'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;
}
A continuación se muestra un ejemplo de código 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;
}
}
En este caso, aunque el valor de la variable privada a la que tiene acceso la propiedad MyFont sea null, el explorador de la propiedad no muestra null; en su lugar, muestra la propiedad Font del primario, si no es null o el valor Font predeterminado definido en Control. De este modo el valor predeterminado de MyFont no se puede establecer simplemente ni se puede aplicar un atributo DefaultValueAttribute a esta propiedad. En su lugar, se deben implementar los métodos ShouldSerialize y Reset para la propiedad MyFont.
Vea también
Conceptos
Definir una propiedad en los controles de formularios Windows Forms
Eventos de cambio de propiedades