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 Reset
os métodos PropertyName e ShouldSerialize
PropertyName.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 Reset
PropertyName 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 Reset
DefaultValueAttributevalor 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 ShouldSerialize
mé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 null
a Font propriedade do pai, se não null
for, 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
.NET Desktop feedback