C#中的Attribute二
一、定义特性
//字段属性约束,在定的的特性上使用系统特性
[AttributeUsage(AttributeTargets.All,AllowMultiple =true,Inherited =true)]
public class ShowAttribute:Attribute
{
public string ShowInfo { get; set; }
public void Show()
{
Console.WriteLine(ShowInfo);
}
}
二、使用特性
[Show(ShowInfo = "我是在类上的第一个特性")]
[Show(ShowInfo = "我是在类上的第二个特性")]
public class ShowTest
{
[Show(ShowInfo = "我是在方法上的特性")]//通过特性类的属性进行传入值
public void TestMethod()
{
}
[Show(ShowInfo = "我是在属性上的特性")]
public string TestProperty { get; set; }
[Show(ShowInfo = "我是在字段上的特性")]
public string TestFiled;
}
三、调用特性实现
public static class InvokeCenter
{
//此处使用的是拓展方法
public static void InvokeManager<T>( this T showTest) where T:new()//泛型无参构造约束
{
Type type = showTest.GetType();
if (type.IsDefined(typeof(ShowAttribute),true))
{
//在类上面查找特性
object[] attributes=type.GetCustomAttributes(typeof(ShowAttribute), true);
foreach (ShowAttribute attribute in attributes)
{
attribute.Show();
}
//在方法上查找
foreach (MethodInfo method in type.GetMethods())
{
if (method.IsDefined(typeof(ShowAttribute), true))
{
object[] attributeMethods = method.GetCustomAttributes(typeof(ShowAttribute), true);
foreach (ShowAttribute attribute in attributeMethods)
{
attribute.Show();
}
}
}
//在属性上查找
foreach (PropertyInfo property in type.GetProperties())
{
if (property.IsDefined(typeof(ShowAttribute), true))
{
object[] attributeProperty = property.GetCustomAttributes(typeof(ShowAttribute), true);
foreach (ShowAttribute attribute in attributeProperty)
{
attribute.Show();
}
}
}
//在字段上查找
foreach (FieldInfo field in type.GetFields())
{
if (field.IsDefined(typeof(ShowAttribute), true))
{
object[] attributeField = field.GetCustomAttributes(typeof(ShowAttribute), true);
foreach (ShowAttribute attribute in attributeField)
{
attribute.Show();
}
}
}
}
}
}
四、调用测试
通过拓展方法调用
ShowTest showTest = new ShowTest();
showTest.InvokeManager();
本文来自博客园,作者:码农阿亮,转载请注明原文链接:https://www.cnblogs.com/wml-it/p/16070599.html
技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
开源库地址,欢迎点亮:
GitHub:https://github.com/ITMingliang
Gitee: https://gitee.com/mingliang_it
GitLab: https://gitlab.com/ITMingliang
建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。