1

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

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

根据此链接,msdn 文档说:

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

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

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

4

2 回答 2

1

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

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

    public Foo()
    {
        ResetName();
    }

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

文档说,如果您调用for属性,它将调用组件上的ResetValue方法。PropertyDescriptorNameResetName

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

于 2013-06-25T08:07:41.497 回答
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();
于 2014-06-01T09:24:21.167 回答