Compartir a través de


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

Otros recursos

Propiedades de los controles de formularios Windows Forms