Show / Hide Table of Contents

Определение значений по умолчанию с помощью методов ShouldSerialize и Reset

ShouldSerialize и Reset — необязательные методы, которые могут использоваться для свойства, в том случае, если свойство не имеет значения по умолчанию. Если свойство имеет значение по умолчанию, необходимо применить DefaultValueAttribute и вместо этого укажите значение по умолчанию для конструктора класса атрибутов. Любой из этих механизмов обеспечивает следующие возможности в конструкторе:

  • Свойство предоставляет визуальную индикацию в обозревателе свойств, если он был изменен со значения по умолчанию.

  • Пользователь может щелкнуть свойства и выберите Сброс восстановить значение свойства к значению по умолчанию.

  • Конструктор создает более эффективный код.

    Note

    Либо применить DefaultValueAttribute или предоставить Reset PropertyName и ShouldSerialize PropertyName методы. Не используйте их вместе.

Reset PropertyName метод задает свойство к значению по умолчанию, как показано в следующем фрагменте кода.

Public Sub ResetMyFont()  
   MyFont = Nothing  
End Sub  
public void ResetMyFont() {  
   MyFont = null;  
}  
Note

Если свойство не является Reset метод, не помечен атрибутом DefaultValueAttributeи не имеет значения по умолчанию, указанного в его объявлении Reset для этого свойства отключен в контекстном меню свойства окна конструктора Windows Forms в Visual Studio.

Конструкторы, такой как Visual Studio используют ShouldSerialize PropertyName метод проверьте, изменено ли значение свойства по умолчанию и создание кода в форме, только если свойство изменяется, что позволяет более эффективный код поколение. Пример:

'Returns true if the font has changed; otherwise, returns false.  
' The designer writes code to the form only if true is returned.  
Public Function ShouldSerializeMyFont() As Boolean  
   Return Not (thefont Is 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.  
public bool ShouldSerializeMyFont() {  
   return thefont != null;  
}  

Полный пример кода ниже.

Option Explicit  
Option Strict  
  
Imports System  
Imports System.Windows.Forms  
Imports System.Drawing  
  
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  
  
   Public Function ShouldSerializeMyFont() As Boolean  
      Return Not (thefont Is Nothing)  
   End Function  
  
   Public Sub ResetMyFont()  
      MyFont = Nothing  
   End Sub  
End Class  
using System;  
using System.Windows.Forms;  
using System.Drawing;  
  
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;  
      }  
   }  
  
   public bool ShouldSerializeMyFont() {  
      return thefont != null;  
   }  
  
   public void ResetMyFont() {  
      MyFont = null;  
   }  
}  

В данном случае, даже в том случае, если значение переменной закрытого обращается к MyFont свойство null, браузер свойств не отображается null; вместо этого он отображает Font свойство родительского объекта, если это не null, или значение по умолчанию Font значения, определенного в Control. Таким образом, значение по умолчанию для MyFont нельзя просто установить и DefaultValueAttribute не может использоваться для этого свойства. Вместо этого ShouldSerialize и Reset методы должны быть реализованы для MyFont свойство.

См. также

  • Свойства элементов управления Windows Forms
  • Определение свойства
  • События изменения свойств
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX