屬性預設值自動填入

摘要:屬性預設值自動填入

我本來以為 DefaultValueAttribute 指定的值可以在程式執行時自動代入(我太天真了)
看了 http://www.dotblogs.com.tw/yc421206/archive/2010/06/15/15897.aspx 這一篇的這一段才知道,還是要在程式執行中給值,那設了預設值是要幹嘛的? 我想應該是有甚麼做用,可是我不懂。

private string _AppVersion="1.0";
[Browsable(true),Category("自訂屬性"),DefaultValue("1.0")]
public string AppVersion
{
    get { return _AppVersion; }
    set { _AppVersion = value; }
}

 

那萬一兩個地方的值不一樣怎麼辦?

自己寫了一段程式,讓程式執行時不用再給值,也不會有不一致的問題發生

using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        ClassA classA;
        public Form1()
        {
            InitializeComponent();
            classA = new ClassA();
        }

        public class ClassA
        {
            [DefaultValueAttribute(1)]
            public int PropertyPa { set; get; }
            [DefaultValueAttribute("2")]
            public string PropertyPb { set; get; }

            public ClassA()
            {
                PropertyInfo[] listPropertyInfo = typeof(ClassA).GetProperties();
                foreach (PropertyInfo propertyInfo in listPropertyInfo)
                {
                    if (propertyInfo != null && propertyInfo.CanWrite)
                    {
                        AttributeCollection attribute = TypeDescriptor.GetProperties(this)[propertyInfo.Name].Attributes;
                        DefaultValueAttribute myAttribute = (DefaultValueAttribute)attribute[typeof(DefaultValueAttribute)];
                        propertyInfo.SetValue(this,myAttribute.Value,null);
                        Debug.WriteLine("The default value is: " + myAttribute.Value.ToString());
                    }
                }
            }
        }
    }
}