Definieren von Standardwerten mit der ShouldSerialize-Methode und der Reset-Methode
ShouldSerialize
und Reset
sind optionale Methoden, die Sie für eine Eigenschaft bereitstellen können, wenn die Eigenschaft keinen einfachen Standardwert aufweist. Wenn die Eigenschaft über einen einfachen Standardwert verfügt, sollten Sie das DefaultValueAttribute anwenden und stattdessen den Standardwert an den Attributklassenkonstruktor übergeben. Beide Mechanismen aktivieren die folgenden Funktionen des Designers:
Die Eigenschaft zeigt im Eigenschaftenbrowser an, wenn ihr Standardwert geändert wurde.
Der Benutzer kann mit der rechten Maustaste auf die Eigenschaft klicken und Zurücksetzen auswählen, um die Eigenschaft auf ihren Standardwert zurückzusetzen.
Der Designer generiert effizienteren Code.
Hinweis
Wenden Sie entweder das DefaultValueAttribute an, oder stellen Sie die Methoden Reset
Eigenschaftsname und ShouldSerialize
Eigenschaftsname bereit. Verwenden Sie nicht beides.
Verwenden Sie beim Deklarieren einer ShouldSerialize
- oder Reset
-Methode den Zugriffsmodifizierer private
. Diese Methoden werden in der Regel vom Designer und nicht vom Benutzercode aufgerufen.
Die Methode Reset
PropertyName legt eine Eigenschaft auf ihren Standardwert fest, wie im folgenden Codefragment gezeigt.
Private Sub ResetMyFont()
MyFont = Nothing
End Sub
private void ResetMyFont()
{
MyFont = null;
}
Hinweis
Wenn eine Eigenschaft keine Reset
-Methode besitzt, nicht mit einem DefaultValueAttribute gekennzeichnet ist und keinen Standardwert in ihrer Deklaration aufweist, ist die Reset
-Option für diese Eigenschaft im Kontextmenü des Fensters Eigenschaften des Windows Forms-Designers in Visual Studio deaktiviert.
Designer wie Visual Studio überprüfen anhand der Methode ShouldSerialize
PropertyName, ob eine Eigenschaft von ihrem Standardwert abweicht, und schreiben nur dann Code in das Formular, wenn eine Eigenschaft geändert wurde. Dies ermöglicht eine effizientere Codegenerierung. Zum Beispiel:
'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;
}
Tipp
Wenn Sie dauerhaft verhindern möchten, dass eine Eigenschaft durch den Designer serialisiert wird, fügen Sie das Attribut DesignerSerializationVisibility mit dem Wert Hidden
hinzu.
Es folgt ein vollständiges Codebeispiel.
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;
}
}
In diesem Fall zeigt der Eigenschaftenbrowser auch dann nicht null
an, wenn der Wert der privaten Variablen, auf die die Eigenschaft MyFont
zugreift, null
lautet. Stattdessen wird die Eigenschaft Font des übergeordneten Objekts angezeigt, wenn sie nicht null
lautet, oder der in Control definierte Standardwert für Font. Daher kann der Standardwert für MyFont
nicht einfach festgelegt werden, und auf diese Eigenschaft kann kein DefaultValueAttribute angewendet werden. Stattdessen müssen die Methoden ShouldSerialize
und Reset
für die Eigenschaft MyFont
implementiert werden.
Weitere Informationen
.NET Desktop feedback