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

本文共 3650 字,大约阅读时间需要 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 }

转载地址:http://jokoo.baihongyu.com/

你可能感兴趣的文章
日常Shell处理命令
查看>>
入门到精通pl/sql编程(千里之行始于足下)3篇
查看>>
Red Hat Enterprise Linux 6.1 下载地址
查看>>
警惕:如何预防mac用户信息泄露
查看>>
微软私有云测试01-Windows Server 2016虚拟化新功能概述
查看>>
facebook应用接入API
查看>>
数据库的备份与恢复
查看>>
命令替换和文件名通配符(笔记)
查看>>
Ra1nker的个人***经验
查看>>
我的友情链接
查看>>
Microsoft活动目录的作用以及优势
查看>>
搭建SSM框架
查看>>
设置vurtualbox虚拟文件夹
查看>>
ImageMagick简介、GraphicsMagick、命令行使用示例
查看>>
为nagios装上pnp4nagios功能
查看>>
使用qxdm过滤UIM log
查看>>
JS-----------为动态添加的元素增添JS方法
查看>>
外包创业路上开篇
查看>>
C++_SHFileOperation文件夹操作
查看>>
python基础-字符编码
查看>>