Definiera standardvärden med metoderna ShouldSerialize och Reset
ShouldSerialize
och Reset
är valfria metoder som du kan ange för en egenskap, om egenskapen inte har ett enkelt standardvärde. Om egenskapen har ett enkelt standardvärde bör du använda DefaultValueAttribute och ange standardvärdet för attributklasskonstruktorn i stället. Någon av dessa mekanismer möjliggör följande funktioner i designern:
Egenskapen ger visuell indikation i egenskapswebbläsaren om den har ändrats från standardvärdet.
Användaren kan högerklicka på egenskapen och välja Återställ för att återställa egenskapen till standardvärdet.
Designern genererar effektivare kod.
Anteckning
Använd antingen DefaultValueAttribute eller ange metoderna Reset
PropertyName och ShouldSerialize
PropertyName. Använd inte båda.
När du deklarerar en ShouldSerialize
- eller Reset
-metod använder du private
-åtkomstmodifieraren. Dessa metoder anropas vanligtvis av designern och inte av användarkod.
Metoden Reset
PropertyName anger en egenskap till dess standardvärde, enligt följande kodfragment.
Private Sub ResetMyFont()
MyFont = Nothing
End Sub
private void ResetMyFont()
{
MyFont = null;
}
Anteckning
Om en egenskap inte har en Reset
-metod, inte är markerad med en DefaultValueAttributeoch inte har något standardvärde som anges i deklarationen, inaktiveras Reset
alternativet för den egenskapen i snabbmenyn i fönstret Egenskaper i Windows Forms Designer i Visual Studio.
Designers som Visual Studio använder metoden ShouldSerialize
PropertyName för att kontrollera om en egenskap har ändrats från standardvärdet och skriver kod i formuläret endast om en egenskap ändras, vilket möjliggör effektivare kodgenerering. Till exempel:
'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;
}
Tips
Om du vill förhindra att en egenskap serialiseras permanent av designern lägger du till attributet DesignerSerializationVisibility med värdet Hidden
.
Ett komplett kodexempel följer.
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;
}
}
Även när värdet av den privata variabeln som används av egenskapen MyFont
är null
, visas inte null
i egenskapsgranskaren. Istället visas egenskapen Font hos den överordnade, om den inte är null
, eller standardvärdet för Font som definieras i Control. Därför kan standardvärdet för MyFont
inte bara anges och en DefaultValueAttribute kan inte tillämpas på den här egenskapen. I stället måste metoderna ShouldSerialize
och Reset
implementeras för egenskapen MyFont
.
Se även
.NET Desktop feedback