►Category 屬性分類
►自訂屬性
參考資源
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,
[Category("Custom")] : 讓所屬 property 呈現在屬性視窗的 Custom 頁面內
►Obsolete 過時設置
[Obsolete], [Obsolete("即將棄用, 請改用...")] :若該屬性被程式使用, 在編譯時僅出現提示訊息, 仍可正常作業
[Obsolete("即將棄用, 請改用...", true)] : 正是棄用, 使用時將無法通過編譯
[Obsolete("即將棄用, 請改用...", true)] : 正是棄用, 使用時將無法通過編譯
►Description
[Description("說明資訊")]
►Conditional
[Conditional("DEBUG")] : 僅在 DEBUG 模式下才有效用
[Conditional("TRACE_ON")] : 配合程式最開頭(using 前)有定義 #define TRACE_ON 識別項的情況下生效.
[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
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,