博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2.C#自定义Attribute
阅读量:6515 次
发布时间:2019-06-24

本文共 3705 字,大约阅读时间需要 12 分钟。

阅读目录 

   一:C#自定义Attribute

   二:AttributeUsageAttribute中的3个属性(Property)中的AttributeTargets

   三:AttributeUsageAttribute中的3个属性(Property)中的,AllowMultiple
   四:AttributeUsageAttribute中的3个属性(Property)中的Inherited
 
一:C#自定义Attribute
  
写一个类继承自System.Attribute就可以了
  二:AttributeUsageAttribute中的3个属性(Property)中的AttributeTargets
     
这个属性类能应用于哪种类型上面,如下图,我的例子中声明属性类HelperAttribute只能用于interface接口上面,而我实际应用于class上面编译就报错了说声明类型不对
 
  
  

 三:AttributeUsageAttribute中的3个属性(Property)中的,AllowMultiple

   能否多次声明指定的属性,如下图AllowMultiple=false的话,我在一个类上声明2次,编辑就报错了

 

四:AttributeUsageAttribute中的3个属性(Property)中的Inherited

我们在父类上声明属性类,而在子类上不声明属性类,把属性类设置为Inherited = false,我们看到查找SubMyClass1类型没有找到它的父类MyClass1的HelperAttribute属性类,所以没有任何输出

我们改为Inherited = true后,再调试看到查找SubMyClass1类型找到了它父类的HelperAttribute属性类,然后输出描述

 我们在父类上声明属性类,也在子类上声明属性类,把属性类设置为 AllowMultiple = false, Inherited = true,我们看到查找SubMyClass1类型找到了它自己的HelperAttribute属性类,然后输出描述,没有找到父类MyClass1的HelperAttribute属性类,是因为 AllowMultiple = false不允许多重属性,所以父类的HelperAttribute属性类被子类SubMyClass1的HelperAttribute属性类覆盖了,所以最终只能找到子类的属性类

我们再改为AllowMultiple = true, Inherited = true,我们看到查找SubMyClass1类型不但是找到了它自己的HelperAttribute属性类而且找到了父类MyClass1的HelperAttribute属性类,所以最终会输出两条信息

实例代码

1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Reflection;  5 using System.Text;  6 using System.Threading.Tasks;  7   8 namespace CustomizeAttribute  9 { 10     class Program 11     { 12         static void Main(string[] args) 13         { 14             foreach (Attribute attr in typeof(SubMyClass1).GetCustomAttributes(true)) 15             { 16                 HelperAttribute helperAtt = attr as HelperAttribute; 17                 if (helperAtt != null) 18                 { 19                     Console.WriteLine("Name:{0} Description:{1}",helperAtt.Name, helperAtt.Description); 20                 } 21             } 22  23             Console.ReadLine(); 24         } 25     } 26  27     [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] 28     public class HelperAttribute : System.Attribute 29     { 30         private string _name; 31         private string _description; 32  33         public HelperAttribute(string des) 34         { 35             this._name = "Default name"; 36             this._description = des; 37         } 38  39         public HelperAttribute(string des1,string des2) 40         { 41             this._description = des1; 42             this._description = des2; 43         } 44  45         public string Description 46         { 47             get 48             { 49                 return this._description; 50             } 51             set 52             { 53                 this._description = value; 54             } 55         } 56  57         public string Name 58         { 59             get 60             { 61                 return this._name; 62             } 63             set 64             { 65                 this._name = value; 66             } 67         } 68  69         public string PrintMessage() 70         { 71             return "PrintMessage"; 72         } 73     } 74  75     [HelperAttribute("this is my class1")] 76     public class MyClass1 77     { 78  79     } 80  81     public class SubMyClass1 : MyClass1 82     { 83  84     } 85      86  87     [HelperAttribute("this is my class2", Name = "myclass2")] 88     public class MyClass2 89     { 90  91     } 92  93     [HelperAttribute("this is my class3", Name = "myclass3", Description = "New Description")] 94     public class MyClass3 95     { 96  97     } 98  99     [HelperAttribute("this is my class4", "this is my class4")]100     public class MyClass4101     {102 103     }104 }

转载于:https://www.cnblogs.com/menglin2010/p/5235318.html

你可能感兴趣的文章
优云·小课堂 第八期:运维自动化的魅力
查看>>
稳定+性能+价格,阿里云发力ECS企业级产品
查看>>
写个软件来防止服务器网站CPU百分百
查看>>
智能城市里,“公共电话亭”的存在意味着什么?
查看>>
JVM分代垃圾回收策略的基础概念
查看>>
《交互式程序设计 第2版》一3.5 捕获简单用户交互行为
查看>>
安装操作系统需要注意的事项
查看>>
5G技术的5大猜想
查看>>
MongoDB 3.0(1):CentOS7 安装MongoDB 3.0服务
查看>>
别随便安装 Pokemon GO被曝藏恶意后门
查看>>
BBC即将推出Britflix流媒体服务:欲成为英国版Netflix
查看>>
让数据会思考会说话,为出海企业提供多样化数据智能解决方案
查看>>
我眼中的自动化测试框架设计要点
查看>>
FLIF:自由的无损图像格式
查看>>
《计算机系统:核心概念及软硬件实现(原书第4版)》——3.7 总结
查看>>
Google开源Inception-ResNet-v2,提升图像分类水准
查看>>
Opera 出售细节曝光:昆仑出资1.68亿美元
查看>>
CentOS 5.3 下快速安装配置 PPTP ××× 服务器
查看>>
产品经理学习总结之技术和设计篇
查看>>
vue之组件认知
查看>>