前言
我们都知道,类是对象的抽象,主要包含属性和方法,属性是用来描述和反映对象特征的参数,方法是用来描述对象的行为,那如果我想对类、属性、方法做进一步的描述呢?
这时候我们可以使用特性。
自定义特性
我们可以通过自定义特性,自由地实现对属性方法的描述。
创建并使用自定义特性可以分为以下四个步骤:
1、声明自定义特性:创建一个类,取名为CustomAttribute,必须以Attribute结束,并继承System.Attribute类,同时可以加一些声明,如下所示:
/// <summary>
/// 说明该类型只针对类和属性有效
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property)]
public class CustomAttribute : Attribute
{
}
2、构建自定义特性:自定义特性类本质也是类,我们在自定义特性类里创建一些属性,并创建一个构造方法用于初始化,代码如下:
/// <summary>
/// 说明该类型只针对类和属性有效
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property)]
public class CustomAttribute : Attribute
{
/// <summary>
/// 构造方法初始化
/// </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、应用自定义特性:接下来就是如何使用了,我们重新创建一个实体类,在属性前面加一段代码,特性一般写在中括号里。
public class Points
{
[Custom("站点名称", 100)]
public string StationNo { get; set; }
[Custom("P1数据名称", 100)]
public float TD_P1 { get; set; }
[Custom("P2数据名称", 100)]
public float TD_P2 { get; set; }
}
4、获取自定义特性:创建自定义特性的目的还是在于获取设置的数据,这里我们通过反射来实现,代码如下:
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);
}
总结
以上就是自定义特性的使用,希望对大家有帮助。
至于在开发项目中如何使用,后面会以实际的一个应用场景来说明。