Definiowanie wartości domyślnych za pomocą metod ShouldSerialize i Reset
ShouldSerialize
i Reset
to opcjonalne metody, które można podać dla właściwości, jeśli właściwość nie ma prostej wartości domyślnej. Jeśli właściwość ma prostą wartość domyślną, należy zamiast tego zastosować DefaultValueAttribute wartość domyślną i podać jej wartość domyślną do konstruktora klasy atrybutów. Jeden z tych mechanizmów umożliwia korzystanie z następujących funkcji w projektancie:
Właściwość udostępnia wizualne wskazanie w przeglądarce właściwości, jeśli została zmodyfikowana z jej wartości domyślnej.
Użytkownik może kliknąć prawym przyciskiem myszy właściwość i wybrać polecenie Resetuj , aby przywrócić właściwość do jej wartości domyślnej.
Projektant generuje bardziej wydajny kod.
Uwaga
Zastosuj DefaultValueAttribute metody PropertyName i ShouldSerialize
PropertyName lub .Reset
Nie używaj obu tych elementów.
Podczas deklarowania ShouldSerialize
metody lub Reset
użyj private
modyfikatora dostępu. Te metody są zwykle wywoływane przez projektanta, a nie przez kod użytkownika.
Metoda Reset
PropertyName ustawia właściwość na wartość domyślną, jak pokazano w poniższym fragmentcie kodu.
Private Sub ResetMyFont()
MyFont = Nothing
End Sub
private void ResetMyFont()
{
MyFont = null;
}
Uwaga
Jeśli właściwość nie ma Reset
metody, nie jest oznaczona elementem DefaultValueAttributei nie ma wartości domyślnej podanej w deklaracji, Reset
opcja dla tej właściwości jest wyłączona w menu skrótów okna Właściwości Projektant formularzy systemu Windows w programie Visual Studio.
Projektant, takie jak Program Visual Studio, używają polecenia ShouldSerialize
Metoda PropertyName, aby sprawdzić, czy właściwość zmieniła się z wartości domyślnej i napisać kod w formularzu tylko wtedy, gdy właściwość została zmieniona, co pozwala na bardziej wydajne generowanie kodu. Przykład:
'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;
}
Napiwek
Jeśli chcesz trwale uniemożliwić serializacji właściwości przez projektanta, dodaj atrybut Projektant SerializationVisibility z wartością Hidden
.
Kompletny przykład kodu jest następujący.
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;
}
}
W takim przypadku, nawet jeśli wartość zmiennej prywatnej, do MyFont
których uzyskuje dostęp właściwość , null
przeglądarka właściwości nie jest wyświetlana null
; zamiast tego wyświetla Font właściwość elementu nadrzędnego, jeśli nie null
jest wartością , lub wartością domyślną Font zdefiniowaną w Control. W związku z tym nie można po prostu ustawić wartości MyFont
domyślnej i DefaultValueAttribute nie można jej zastosować do tej właściwości. ShouldSerialize
Zamiast tego należy zaimplementować metody i Reset
dla MyFont
właściwości .
Zobacz też
.NET Desktop feedback