Definir valores predeterminados con los métodos ShouldSerialize y Reset
ShouldSerialize
y Reset
son métodos opcionales que puede proporcionar para una propiedad, si la propiedad no tiene un valor predeterminado simple. Si la propiedad tiene un valor predeterminado simple, debe aplicar DefaultValueAttribute y proporcionar el valor predeterminado al constructor de la clase de atributos en su lugar. Cualquiera de estos mecanismos habilita las siguientes características en el diseñador:
La propiedad proporciona una indicación visual en el explorador de propiedades si se ha modificado a partir de su valor predeterminado.
El usuario puede hacer clic con el botón derecho en la propiedad y elegir Restablecer para restaurar la propiedad a su valor predeterminado.
El diseñador genera código más eficaz.
Nota:
Aplique DefaultValueAttribute o proporcione los métodos Reset
PropertyName y ShouldSerialize
PropertyName. No use ambos.
Cuando declare un método ShouldSerialize
o Reset
, utilice el modificador de acceso private
. Estos métodos suelen invocarse por el diseñador y no por el código del usuario.
El método Reset
PropertyName establece una propiedad en su valor predeterminado, como se muestra en el siguiente fragmento de código.
Private Sub ResetMyFont()
MyFont = Nothing
End Sub
private void ResetMyFont()
{
MyFont = null;
}
Nota:
Si una propiedad no tiene un método Reset
, no está marcado con DefaultValueAttribute y no tiene un valor predeterminado proporcionado en su declaración, la opción Reset
para esa propiedad está deshabilitada en el menú contextual de la ventana Propiedades del Diseñador de Windows Forms en Visual Studio.
Los diseñadores como Visual Studio usan el método ShouldSerialize
PropertyName para comprobar si una propiedad ha cambiado de su valor predeterminado y escribir código en el formulario solo si se cambia una propiedad, lo que permite generar código más eficaz. Por ejemplo:
'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;
}
Sugerencia
Si quiere evitar permanentemente que el diseñador serialice una propiedad, agregue el atributo DesignerSerializationVisibility con el valor Hidden
.
A continuación se muestra un ejemplo de código 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;
}
}
En este caso, incluso cuando el valor de la variable privada a la que accede la propiedad MyFont
sea null
, el explorador de propiedades no muestra null
; en su lugar, muestra la propiedad Font del elemento primario, si no es null
, o el valor predeterminado Font definido en Control. Por lo tanto, el valor predeterminado de MyFont
no se puede establecer simplemente y no se puede aplicar DefaultValueAttribute a esta propiedad. En su lugar, los métodos ShouldSerialize
y Reset
deben implementarse para la propiedad MyFont
.
Consulte también
.NET Desktop feedback