Definindo valores padrão com os métodos ShouldSerialize e Reset

ShouldSerialize e Reset são métodos opcionais que você pode fornecer para uma propriedade, se a propriedade não tiver um valor padrão simples. Se a propriedade tiver um valor padrão simples, você deverá aplicar o e fornecer o DefaultValueAttribute valor padrão ao construtor de classe de atributo. Qualquer um desses mecanismos habilita os recursos a seguir no designer:

  • A propriedade fornecerá uma indicação visual no navegador de propriedades se tiver sido modificado de seu valor padrão.

  • O usuário pode clicar com o botão direito do mouse na propriedade e escolher Redefinir para restaurar a propriedade para o valor padrão.

  • O designer gera um código mais eficiente.

Observação

Aplique ou forneça Resetos métodos PropertyName e ShouldSerializePropertyName.DefaultValueAttribute Não use os dois.

Ao declarar um método ou Reset , use o private modificador de ShouldSerialize acesso. Esses métodos geralmente são invocados pelo designer e não pelo código do usuário.

O método ResetPropertyName define uma propriedade para o valor padrão, conforme mostrado no seguinte fragmento de código.

Private Sub ResetMyFont()
   MyFont = Nothing
End Sub
private void ResetMyFont()
{
   MyFont = null;
}

Observação

Se uma propriedade não tiver um método, não estiver marcada com um , e não tiver um ResetDefaultValueAttributevalor padrão fornecido em sua declaração, a Reset opção para essa propriedade será desabilitada no menu de atalho da janela Propriedades do Windows Forms Designer no Visual Studio.

Designers como o Visual Studio usam o ShouldSerializemétodo PropertyName para verificar se uma propriedade foi alterada de seu valor padrão e gravar código no formulário somente se uma propriedade for alterada, permitindo assim uma geração de código mais eficiente. Por exemplo:

'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;
}

Dica

Se você quiser impedir permanentemente que uma propriedade seja serializada pelo designer, adicione o atributo DesignerSerializationVisibility com o valor de Hidden.

Segue um exemplo 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;
   }
}

Nesse caso, mesmo quando o valor da variável privada acessada MyFont pela propriedade é null, o navegador de propriedades não exibe , em vez disso, ele exibe nulla Font propriedade do pai, se não nullfor, ou o valor padrão Font definido em Control. Assim, o valor padrão para MyFont não pode ser simplesmente definido e um DefaultValueAttribute não pode ser aplicado a essa propriedade. Em vez disso, os métodos ShouldSerialize e Reset devem ser implementados para a propriedade MyFont.

Confira também