PropertyDescriptor.ResetValue方法如何确定属性的默认值

本文关键字:属性 默认值 何确定 ResetValue 方法 PropertyDescriptor | 更新日期: 2023-09-27 18:19:58

我已经实现了一个自定义类,并试图通过调用PropertyDescriptor.ResetValue方法来设置其默认值。当我在互联网上做一些研究时,我在msdn中看到了一个关于这种方法、它的用法以及如何使用的链接。

http://msdn.microsoft.com/en-us/library/system.componentmodel.propertydescriptor.resetvalue.aspx

根据这个链接,msdn文件说:

此方法按以下优先顺序确定要将属性重置为的值:1-此属性存在阴影属性。2-此属性有一个DefaultValueAttribute。3-您已经实现了一个"ResetMyProperty"方法,其中"MyProperty"是您传递给它的属性的名称。

第二种方法不符合我的需要。另一方面,没有足够的第一项和第三项的使用样本。

你能特别解释一下第三个吗?

PropertyDescriptor.ResetValue方法如何确定属性的默认值

我不知道第一个选项(我怀疑这是关于在基类中声明一个属性和在派生类中声明"新"属性),但第三个对我来说似乎很简单:

public class Foo
{
    public string Name { get; set; }
    public Foo()
    {
        ResetName();
    }
    public void ResetName()
    {
        Name = "Some default value";
    }
}

文档中说,如果对Name属性的PropertyDescriptor调用ResetValue,它将调用组件上的ResetName方法。

我从来没有真正尝试过,但这将是我的解释。

您可以检索(2)DefaultValueAttribute,如下所示:

public class MyClass
{
[DefaultValue("my default value")]
public string MyVar { get; set; }
foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(typeof(MyClass)))
    string defaultValue = descriptor.Attributes.OfType<DefaultValueAttribute>().First().Value.ToString();