利用属性(Attribute)扩展元数据

本文深入介绍了C#中的Attribute,包括Attribute概述、应用方式、编写自定义属性以及如何检索存储在属性中的信息。通过示例展示了如何在方法和程序集级别应用属性,以及如何定义和获取属性的实例。同时,文章提到了AttributeUsageAttribute在控制属性应用范围中的作用。
摘要由CSDN通过智能技术生成

一、Attribute 概述

 公共语言运行库允许您添加类似关键字的描述性声明(称为属性 (Attribute))来批注编程元素,如类型、字段、方法和属性 (Property)。

关键字:如果您使用过 C++,或许对包含关键字(如 public 和 private)的声明比较熟悉,这些关键字提供有关类成员的其他信息。另外,这些关键字通过描述类成员对其他类的可访问性来进一步定义类成员的行为。由于编译器被显式设计为识别预定义关键字,因此传统上您没有机会创建自己的关键字。


二、应用属性

通过下列过程将属性应用到代码元素。

    通过从 .NET Framework 导入属性的命名空间来定义新的属性或使用现有属性。

    通过在紧邻代码元素之前放置属性来将该属性应用于代码元素。

    为属性指定位置参数和命名参数。

属性在您编译代码时被发送到元数据中,并可通过运行库反射服务用于公共语言运行库以及任何自定义工具或应用程序。

 按照约定,所有属性名都以 Attribute 结尾。但是,某些以运行库为目标的语言(如 Visual Basic 和 C#)不要求指定属性的全名。例如,如果要初始化 System.ObsoleteAttribute,只需将其引用为 Obsolete 即可。

将属性应用于方法 
下面的代码示例显示如何声明 System.ObsoleteAttribute,该属性将代码标记为过时。字符串 "Will be removed in next version" 被传递到该属性。当调用该属性所描述的代码时,该属性将产生编译器警告以显示所传递的字符串。

  1.  using System;
  2.   public class Example
  3.   {
  4.       // Specify attributes between square brackets in C#.
  5.       // This attribute is applied only to the Add method.
  6.       [Obsolete("Will be removed in next version.")]
  7.       public static int Add(int a, int b)
  8.       {
  9.    return (a + b);
  10.       }
  11.   }
  12.   class Test
  13.   {
  14.       static void Main()
  15.       {
  16.    // This generates a compile-time warning.
  17.    int i = Example.Add(2, 2);
  18.       }
  19.   }

 

在程序集级别应用属性 
    如果要在程序集级别应用属性,请使用 Assembly 关键字。下列代码显示在程序集级别应用的 AssemblyNameAttribute。

  1.   using System.Reflection;
  2.   [assembly:AssemblyName("MyAssembly")]

三、编写自定义属性

自定义属性实质上是直接或间接地从 System.Attribute 派生的传统类。与传统类一样,自定义属性也包含存储和检索数据的方法。
正确设计自定义属性类的主要步骤如下:

    1、应用 AttributeUsageAttribute 
        自定义属性声明以 AttributeUsageAttribute 开始,包含三个对创建自定义属性具有重要意义的成员:AttributeTargets、Inherited 和 AllowMultiple。   
        AttributeTargets 成员:指示该属性可以应用的程序元素。以下之一:程序集、字段、事件、方法、模块、参数、属性、返回值、类型。

         继承属性:Inherited 属性:指示属性是否可由从该属性应用到的类派生的类继承。该属性采用 true(默认值)或 false 标志。   
         AllowMultiple 属性: 指示元素中是否可存在属性的多个实例。

    2、声明属性类 
         应用 AttributeUsa

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值