本文介绍如何创建 Reset<PropertyName> 和 ShouldSerialize<PropertyName> 方法来管理 Visual Studio 中 “属性” 窗口的属性。 您可以为属性提供Reset和ShouldSerialize可选方法,前提是该属性没有简单的默认值。 如果属性具有简单的默认值,则应使用 DefaultValueAttribute 并将默认值传递给特性类构造函数。 这两种机制都支持设计器中的以下功能:
- 如果属性已从其默认值修改,则此属性在属性浏览器中提供视觉指示。
 - 用户可以右键单击该属性,然后选择 “重置” 将属性还原为其默认值。
 - 设计器生成更高效的代码。
 
有关属性的详细信息,请参阅 Reset 和 ShouldSerialize。
辅助代码
本文通过创建指南针玫瑰控件来演示 Reset 和 ShouldSerialize 方法。 如果使用的是自己的用户控件,则可以跳过本部分。
将以下枚举添加到代码:
public enum Directions { None, North, NorthEast, East, SouthEast, South, SouthWest, West, NorthWest, }Public Enum Directions None North NorthEast East SouthEast South SouthWest West NorthWest End Enum添加名为
CompassRose的用户控件。将名为
Direction类型的Directions属性添加到用户控件。public Directions Direction { get; set; } = Directions.None;Public Property Direction As Directions = Directions.None
重置
该方法 Reset<PropertyName> 将相应的 <PropertyName> 属性重置为其默认值。
以下代码将属性重置 Direction 为 None,该属性被视为指南针玫瑰控件的默认值:
private void ResetDirection() =>
    Direction = Directions.None;
Private Sub ResetDirection()
    Direction = Directions.None
End Sub
ShouldSerialize
              ShouldSerialize<PropertyName> 方法返回一个布尔值,该值指示后备属性是否已从其默认值更改,以及是否应将其序列化为设计器的代码。
当Direction属性不等于None时,以下代码返回 true,表示已选择一个方向:
private bool ShouldSerializeDirection() =>
    Direction != Directions.None;
Private Function ShouldSerializeDirection() As Boolean
    Return Direction <> Directions.None
End Function
示例:
以下代码显示了 Reset 属性的 ShouldSerialize 和 Direction 方法:
public partial class CompassRose : UserControl
{
    public Directions Direction { get; set; } = Directions.None;
    public CompassRose() =>
        InitializeComponent();
    private void ResetDirection() =>
        Direction = Directions.None;
    private bool ShouldSerializeDirection() =>
        Direction != Directions.None;
}
Public Class CompassRose
    Public Property Direction As Directions = Directions.None
    Private Sub ResetDirection()
        Direction = Directions.None
    End Sub
    Private Function ShouldSerializeDirection() As Boolean
        Return Direction <> Directions.None
    End Function
End Class