Attribute 介紹

1 篇文章 / 0 new
author
Attribute 介紹
►Category 屬性分類
[Category("Custom")] : 讓所屬 property 呈現在屬性視窗的 Custom 頁面內
►Obsolete 過時設置
[Obsolete], [Obsolete("即將棄用, 請改用...")] :若該屬性被程式使用, 在編譯時僅出現提示訊息, 仍可正常作業
[Obsolete("即將棄用, 請改用...", true)] : 正是棄用, 使用時將無法通過編譯
►Description
[Description("說明資訊")]
►Conditional
[Conditional("DEBUG")] : 僅在 DEBUG 模式下才有效用
[Conditional("TRACE_ON")] : 配合程式最開頭(using 前)有定義 #define TRACE_ON 識別項的情況下生效.
►DefaultValueAttribute
[DefaultValueAttribute(Int32.MinValue)]
public float minValue { get; set; }
設定 property 的預設值, 需再 建構式內 執行程式才能將資料填入
System.Reflection.PropertyInfo[] listPropertyInfo = this.GetType().GetProperties();
foreach (System.Reflection.PropertyInfo propertyInfo in listPropertyInfo) {
    if (propertyInfo != null && propertyInfo.CanWrite) {
        AttributeCollection attribute = TypeDescriptor.GetProperties(this)[propertyInfo.Name].Attributes;
        DefaultValueAttribute myAttribute = (DefaultValueAttribute)attribute[typeof(DefaultValueAttribute)];
        if (myAttribute != null)
            propertyInfo.SetValue(this, myAttribute.Value, null);
    }
}
使用上感覺不方便, 若在 VS2015 上就可以使用下表達方式, 這樣就簡潔多了
public float minValue { get; set; } = Int32.MinValue

►自訂屬性
自訂 Help 屬性參數
class HelpAttribute : Attribute {
    public string HelpText { get; set; }
}
使用時為 [Help(HelpText = "這是一個自訂輔助訊息")]
►若自訂屬性參數需要做判斷處理, 作法如下
[AttributeUsage(AttributeTargets.Property)]
class Check : Attribute {
    public int MaxLength { get; set; }
}
某 Class 使用
[Check(MaxLength = 10)]
public string CustomerCode
屬性參數檢查作法如下
// Loop through all properties
foreach (PropertyInfo p in objtype.GetProperties()) {
    // for every property loop through all attributes
    foreach (Attribute a in p.GetCustomAttributes(false)) {
        Check c = (Check)a;
        if (p.Name == "CustomerCode") {
            // Do the length check and and raise exception accordingly
            if (obj.CustomerCode.Length > c.MaxLength)
                throw new Exception(" Max length issues ");
        }
    }
}

參考資源
http://www.codeproject.com/Articles/827091/Csharp-Attributes-in-minutes, http://edn.embarcadero.com/article/30250, http://geekswithblogs.net/abhijeetp/archive/2009/01/10/dynamic-attribute..., http://codereview.stackexchange.com/questions/66388/using-custom-attribu..., http://typecastexception.com/post/2014/03/10/C-Using-Reflection-and-Cust..., 元件設計階段提供的屬性, Attributes in Windows Forms Controls,
Free Web Hosting