• 2.C#自定义Attribute


    阅读目录 
       一:
    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 MyClass4
    101     {
    102 
    103     }
    104 }
  • 相关阅读:
    246.Strobogrammatic Number
    245.Shortest Word Distance III
    244.Shortest Word Distance II
    243.Shortest Word Distance
    242. Valid Anagram
    241. Different Ways to Add Parentheses
    240.Search in a 2D Matrix II
    239. Sliding Window Maximum
    238. Product of Array Except Self
    postgres 行列转换
  • 原文地址:https://www.cnblogs.com/menglin2010/p/5235318.html
Copyright © 2020-2023  润新知