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

时间:2013-06-25 08:05:04

标签: c# attributes default-value propertydescriptor

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

我不知道第一个选项(我怀疑它是在基类中声明一个属性和派生类中的“new”属性),但第三个看起来对我很简单:

public class Foo
{
    public string Name { get; set; }

    public Foo()
    {
        ResetName();
    }

    public void ResetName()
    {
        Name = "Some default value";
    }
}

文档说,如果您在ResetValue属性PropertyDescriptor上调用Name,则会调用该组件上的ResetName方法。

我从未尝试过这个,但那是我的解释。

答案 1 :(得分:0)

你可以像这样检索(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();