Определение значений по умолчанию с помощью методов 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
свойство.