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 ShouldSerializePropertyName 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 ResetPropertyName 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 ShouldSerializeMetoda 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ść , nullprzeglądarka właściwości nie jest wyświetlana null; zamiast tego wyświetla Font właściwość elementu nadrzędnego, jeśli nie nulljest 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ż