ShouldSerialize 및 Reset 메서드를 사용하여 기본값 정의Defining Default Values with the ShouldSerialize and Reset Methods

ShouldSerializeReset 는 속성에 단순 기본값이 없는 경우 속성에 대해 제공할 수 있는 선택적 메서드입니다.ShouldSerialize and Reset are optional methods that you can provide for a property, if the property does not a have simple default value. 속성에 단순 기본값이 있는 경우를 적용 DefaultValueAttribute 하 고 대신 특성 클래스 생성자에 기본값을 제공 해야 합니다.If the property has a simple default value, you should apply the DefaultValueAttribute and supply the default value to the attribute class constructor instead. 이러한 메커니즘 중 하나를 통해 디자이너에서 다음 기능을 사용할 수 있습니다.Either of these mechanisms enables the following features in the designer:

  • 속성은 속성 브라우저가 기본값에서 수정 된 경우이를 시각적으로 표시 합니다.The property provides visual indication in the property browser if it has been modified from its default value.

  • 사용자는 속성을 마우스 오른쪽 단추로 클릭 하 고 다시 설정 을 선택 하 여 속성을 기본값으로 복원할 수 있습니다.The user can right-click on the property and choose Reset to restore the property to its default value.

  • 디자이너가 보다 효율적인 코드를 생성 합니다.The designer generates more efficient code.

    참고

    DefaultValueAttribute 적용 하거나 propertynameReset ShouldSerialize propertyname 메서드를 제공 합니다.Either apply the DefaultValueAttribute or provide ResetPropertyName and ShouldSerializePropertyName methods. 둘 다 사용 하지 마세요.Do not use both.

Reset PropertyName 메서드는 다음 코드 조각에 표시 된 것 처럼 속성을 기본값으로 설정 합니다.The ResetPropertyName method sets a property to its default value, as shown in the following code fragment.

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

참고

속성 Reset 에 메서드가 없고로 표시 DefaultValueAttribute되어 있지 않고 해당 선언 Reset 에 기본값이 제공 되지 않은 경우 속성 창의 바로 가기 메뉴에서 해당 속성에 대 한 옵션을 사용할 수 없습니다. Visual Studio의 Windows Forms 디자이너입니다.If a property does not have a Reset method, is not marked with a DefaultValueAttribute, and does not have a default value supplied in its declaration, the Reset option for that property is disabled in the shortcut menu of the Properties window of the Windows Forms Designer in Visual Studio.

Visual Studio와 같은 디자이너는 ShouldSerialize PropertyName 메서드를 사용 하 여 속성이 기본값에서 변경 되었는지 여부를 확인 하 고, 속성이 변경 된 경우에만 폼에 코드를 작성 하 여 보다 효율적인 코드 생성을 허용 합니다.Designers such as Visual Studio use the ShouldSerializePropertyName method to check whether a property has changed from its default value and write code into the form only if a property is changed, thus allowing for more efficient code generation. 예를 들어:For example:

'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;
}

전체 코드 예제는 다음과 같습니다.A complete code example follows.

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 경우 속성에서 액세스 하는 private 변수의 값이 인 null경우에도 속성 브라우저는 표시 null되지 않습니다. 대신 부모의 Font null속성을 표시 합니다. 또는에 Font Control정의 된 기본값입니다.In this case, even when the value of the private variable accessed by the MyFont property is null, the property browser does not display null; instead, it displays the Font property of the parent, if it is not null, or the default Font value defined in Control. 따라서의 MyFont 기본값은 간단히 설정할 수 없으며이 속성에를 DefaultValueAttribute 적용할 수 없습니다.Thus the default value for MyFont cannot be simply set, and a DefaultValueAttribute cannot be applied to this property. 대신 속성에 대해 Reset 및메서드를구현해야합니다.ShouldSerialize MyFontInstead, the ShouldSerialize and Reset methods must be implemented for the MyFont property.

참고자료See also