前言
我們都知道,類是對象的抽象,主要包含屬性和方法,屬性是用來描述和反映對象特征的參數(shù),方法是用來描述對象的行為,那如果我想對類、屬性、方法做進(jìn)一步的描述呢?
這時候我們可以使用特性。
自定義特性
我們可以通過自定義特性,自由地實現(xiàn)對屬性方法的描述。
創(chuàng)建并使用自定義特性可以分為以下四個步驟:
1、聲明自定義特性:創(chuàng)建一個類,取名為CustomAttribute,必須以Attribute結(jié)束,并繼承System.Attribute類,同時可以加一些聲明,如下所示:
/// <summary>
/// 說明該類型只針對類和屬性有效
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property)]
public class CustomAttribute : Attribute
{
}
2、構(gòu)建自定義特性:自定義特性類本質(zhì)也是類,我們在自定義特性類里創(chuàng)建一些屬性,并創(chuàng)建一個構(gòu)造方法用于初始化,代碼如下:
/// <summary>
/// 說明該類型只針對類和屬性有效
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property)]
public class CustomAttribute : Attribute
{
/// <summary>
/// 構(gòu)造方法初始化
/// </summary>
/// <param name="DisplayName"></param>
/// <param name="DisplayWidth"></param>
public CustomAttribute(string DisplayName, int DisplayWidth)
{
this.DisplayName = DisplayName;
this.DisplayWidth = DisplayWidth;
}
/// <summary>
/// 顯示名稱
/// </summary>
public string DisplayName { get; set; }
/// <summary>
/// 顯示寬度
/// </summary>
public int DisplayWidth { get; set; }
}
3、應(yīng)用自定義特性:接下來就是如何使用了,我們重新創(chuàng)建一個實體類,在屬性前面加一段代碼,特性一般寫在中括號里。
public class Points
{
[Custom("站點名稱", 100)]
public string StationNo { get; set; }
[Custom("P1數(shù)據(jù)名稱", 100)]
public float TD_P1 { get; set; }
[Custom("P2數(shù)據(jù)名稱", 100)]
public float TD_P2 { get; set; }
}
4、獲取自定義特性:創(chuàng)建自定義特性的目的還是在于獲取設(shè)置的數(shù)據(jù),這里我們通過反射來實現(xiàn),代碼如下:
Type t = typeof(Points);
foreach (PropertyInfo pi in t.GetProperties())
{
string propertyName = pi.Name;
string displayName = pi.GetCustomAttribute<CustomAttribute>()?.DisplayName;
int displayWidth = pi.GetCustomAttribute<CustomAttribute>().DisplayWidth;
Console.WriteLine("屬性名稱:"+propertyName+";顯示名稱:"+displayName + ";顯示寬度:" + displayWidth);
}
總結(jié)
以上就是自定義特性的使用,希望對大家有幫助。
至于在開發(fā)項目中如何使用,后面會以實際的一個應(yīng)用場景來說明。