Definování výchozích hodnot pomocí metod ShouldSerialize a Reset
ShouldSerialize
a Reset
jsou volitelné metody, které můžete zadat pro vlastnost, pokud vlastnost nemá jednoduchou výchozí hodnotu. Pokud vlastnost má jednoduchou výchozí hodnotu, měli byste použít DefaultValueAttribute a zadat výchozí hodnotu do konstruktoru třídy atributu. Některý z těchto mechanismů umožňuje v návrháři následující funkce:
Tato vlastnost poskytuje vizuální označení v prohlížeči vlastností, pokud byla změněna z výchozí hodnoty.
Uživatel může kliknout pravým tlačítkem myši na vlastnost a zvolit Obnovit obnovit vlastnost na výchozí hodnotu.
Návrhář generuje efektivnější kód.
Poznámka:
Buď použijte DefaultValueAttribute nebo zadejte Reset
PropertyName a ShouldSerialize
PropertyName metody. Nepoužívejte obojí.
Při deklarování ShouldSerialize
metody nebo Reset
metody použijte private
modifikátor přístupu. Tyto metody jsou obvykle vyvolány návrhářem, a ne uživatelským kódem.
Metoda Reset
PropertyName nastaví vlastnost na výchozí hodnotu, jak je znázorněno v následujícím fragmentu kódu.
Private Sub ResetMyFont()
MyFont = Nothing
End Sub
private void ResetMyFont()
{
MyFont = null;
}
Poznámka:
Pokud vlastnost nemá metoduReset
, není označena DefaultValueAttributea nemá výchozí hodnotu zadanou v jeho deklaraci, Reset
možnost pro tuto vlastnost je zakázána v místní nabídce okna Vlastnosti návrháře model Windows Forms v sadě Visual Studio.
Návrháři, jako je Visual Studio, používají Metodu ShouldSerialize
PropertyName ke kontrole, zda se vlastnost změnila z výchozí hodnoty, a napsat kód do formuláře pouze v případě, že je vlastnost změněna, což umožňuje efektivnější generování kódu. Příklad:
'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;
}
Tip
Pokud chcete trvale zabránit serializaci vlastnosti návrhářem, přidejte DesignerSerializationVisibility atribut s hodnotou Hidden
.
Následuje kompletní příklad kódu.
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;
}
}
V tomto případě i v případě, že hodnota privátní proměnné přístupná MyFont
vlastností je null
, prohlížeč vlastností nezobrazí null
; místo toho zobrazí Font vlastnost nadřazeného objektu, pokud není null
, nebo výchozí Font hodnota definovaná v Control. Výchozí hodnotu pro MyFont
nelze jednoduše nastavit a DefaultValueAttribute nelze ji použít pro tuto vlastnost. ShouldSerialize
Místo toho musí být pro vlastnost implementovány MyFont
metodyReset
.
Viz také
.NET Desktop feedback