Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


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 i podać 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 wskaźnik wizualny w przeglądarce właściwości, jeśli została zmodyfikowana od wartości domyślnej.

  • Użytkownik może kliknąć prawym przyciskiem myszy właściwość i wybrać Resetuj, aby przywrócić właściwość do jej wartości domyślnej.

  • Projektant generuje bardziej wydajny kod.

Uwaga

Zastosuj DefaultValueAttribute lub podaj metody ResetPropertyName i ShouldSerializePropertyName. Nie używaj obu tych elementów.

Podczas deklarowania metody ShouldSerialize lub Reset użyj modyfikatora dostępu private. 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 fragcie kodu.

C#
private void ResetMyFont()
{
   MyFont = null;
}

Uwaga

Jeśli właściwość nie ma metody Reset, nie jest oznaczona DefaultValueAttributei nie ma wartości domyślnej podanej w deklaracji, opcja Reset dla tej właściwości jest wyłączona w menu skrótów okna właściwości w programie Visual Studio.

Projektanci, tacy jak Program Visual Studio, używają metody ShouldSerializePropertyName, aby sprawdzić, czy właściwość zmieniła się z wartości domyślnej i napisz kod w formularzu tylko wtedy, gdy właściwość zostanie zmieniona, co pozwoli na bardziej wydajne generowanie kodu. Na przykład:

C#
// 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;
}

Porada

Jeśli chcesz trwale uniemożliwić serializację właściwości przez projektanta, dodaj atrybut DesignerSerializationVisibility z wartością Hidden.

Kompletny przykład kodu jest następujący.

C#
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 wtedy, gdy wartość zmiennej prywatnej dostępnej przez właściwość MyFont jest null, przeglądarka właściwości nie wyświetla null; zamiast tego wyświetla właściwość Font elementu nadrzędnego, jeśli nie jest null, lub domyślną wartość Font zdefiniowaną w Control. W związku z tym nie można po prostu ustawić wartości domyślnej dla MyFont, a do tej właściwości nie można zastosować DefaultValueAttribute. Zamiast tego należy zaimplementować metody ShouldSerialize i Reset dla właściwości MyFont.

Zobacz też