【问题标题】:How does PropertyDescriptor.ResetValue Method determine default value of propertyPropertyDescriptor.ResetValue 方法如何确定属性的默认值
【发布时间】:2013-06-25 08:05:04
【问题描述】:

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

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

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

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

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

能否请您特别解释一下第三个?

【问题讨论】:

    标签: c# attributes default-value propertydescriptor


    【解决方案1】:

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

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

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

    我从未真正尝试过,但这是我的解释。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多