Partilhar via


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

ShouldSerializee Reset são métodos opcionais que você pode fornecer para uma propriedade, se a propriedade não tem uma valor padrão simple. Se a propriedade tem um valor padrão simples, você deverá aplicar o DefaultValueAttribute e fornecer o valor padrão para o construtor de classe de atributo em vez disso. Qualquer um desses mecanismos permite que os seguintes recursos no designer:

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

  • O usuário pode com o botão direito sobre a propriedade e escolha Redefinir para restaurar a propriedade para o valor padrão.

  • O designer gera um código mais eficiente.

    ObservaçãoObservação

    Ou aplicar o DefaultValueAttribute ou fornecer ResetPropertyName e ShouldSerializePropertyName métodos. Não use ambos.

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

Public Sub ResetMyFont()
   MyFont = Nothing
End Sub
public void ResetMyFont() {
   MyFont = null;
}
ObservaçãoObservação

Se uma propriedade não tiver um Reset método, não é marcado com um DefaultValueAttributee não tem um valor padrão fornecido na sua declaração, o Reset opção para essa propriedade está desabilitada no menu de atalho da Propriedades janela do Windows Forms Designer no Visual Studio.

Designers como Visual Studio usar o ShouldSerializePropertyName método para verificar se uma propriedade foi alterado de seu valor padrão e escrever código para se o formulário uma propriedade for alterado, permitindo assim para 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.
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;
}

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

Neste caso, mesmo quando o valor da variável particular acessado pela MyFont é a propriedade null, o Pesquisador de propriedade não exibe null; em vez disso, ele exibe o Font a propriedade do pai, se não for null, ou o padrão Font valor definido em Control. Assim, o valor padrão para MyFont não pode ser simplesmente definida e um DefaultValueAttribute não pode ser aplicado a esta propriedade. Em vez disso, o ShouldSerialize e Reset métodos devem ser implementados para o MyFont propriedade.

Consulte também

Conceitos

Definindo uma propriedade em controles do Windows Forms

Eventos de propriedade alterada

Outros recursos

Propriedades de controles do Windows Forms