.Net Attribute 什么是特性、预定义特性使用(一)

news/2024/5/19 23:40:04 标签: java, 前端, Attribute, 特性, .net, .netcore

什么是特性

特性Attribute是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。

特性Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。在.Net 框架提供了两种类型的特性预定特性自定义特性

预定义特性

.net框架内提供了三种预定义特性,经常使用特性或对特性有了解的朋友肯定见到过或用过。

AttributeUsage

预定义特性 AttributeUsage 描述了如何使用一个自定义特性类。它规定了特性可应用到的项目的类型。使用AttributeUsage 特性有个前提,该类必须继承Attribute抽象类。

例如:

[AttributeUsage(AttributeTargets.Property)]//只能标记在属性上
public class MyCustomAttribute: Attribute
{
       
}

 AttributeUsage 使用语法详细如下:

 [AttributeUsage(AttributeTargets.Property,AllowMultiple = true,Inherited = true)] 

[AttributeUsage(
   validon,
   AllowMultiple=allowmultiple,
   Inherited=inherited
)]

其中:

  • 参数 validon 规定特性可被放置的语言元素。它是枚举器 AttributeTargets 的值的组合。默认值是 AttributeTargets.All
  • 参数 allowmultiple(可选的)为该特性的 AllowMultiple 属性(property)提供一个布尔值。如果为 true,则该特性是多用的。默认值是 false(单用的)。
  • 参数 inherited(可选的)为该特性的 Inherited 属性(property)提供一个布尔值。如果为 true,则该特性可被派生类继承。默认值是 false(不被继承)。

例如:

[AttributeUsage(AttributeTargets.Class |//特性只能运用于类上
AttributeTargets.Constructor |//特性只能运用于构造函数上
AttributeTargets.Field |//特性只能运用于字段上
AttributeTargets.Method |//特性只能运用于方法上
AttributeTargets.Property, //特性只能运用于属性上
AllowMultiple = true)]//true:可以为程序元素指定有多个实

Conditional

这个预定义特性标记了一个条件方法,其执行依赖于它顶的预处理标识符。

它会引起方法调用的条件编译,取决于指定的值,比如 Debug 或 Trace。例如,当调试代码时显示变量的值。

规定该特性的语法如下: 

public class MyTest
    {
        [Conditional("DEBUG")]
        public static void Message(string msg)
        {
            Console.WriteLine(msg);
        }
    }

 class Program
    {
        static void function1()
        {
            MyTest.Message("In Function 1.");
            function2();
        }
        static void function2()
        {
            MyTest.Message("In Function 2.");
        }

        static void Main(string[] args)
        {
            MyTest.Message("In Main function.");
            function1();
            Console.ReadLine();
       }
}

 当上面的代码被编译和执行时,它会产生下列结果:

Obsolete

这个预定义特性标记了不应被使用的程序实体。它可以让您通知编译器丢弃某个特定的目标元素。例如,当一个新方法被用在一个类中,但是您仍然想要保持类中的旧方法,您可以通过显示一个应该使用新方法,而不是旧方法的消息,来把它标记为 obsolete(过时的)。

规定该特性的语法如下:

[Obsolete(message)]

[Obsolete(message, iserror)]

其中:

  • 参数 message,是一个字符串,描述项目为什么过时的原因以及该替代使用什么。
  • 参数 iserror,是一个布尔值。如果该值为 true,编译器应把该项目的使用当作一个错误。默认值是 false(编译器生成一个警告)。

下面的实例演示了该特性

 public class MyTest
    {
        [Obsolete("这是一个过时的方法")]
        public static void Message(string msg)
        {
            Console.WriteLine(msg);
        }
    }

 当编译程序时会出现如下效果:

public class MyTest
    {
        [Obsolete("该方法已经不可使用,请使用最新XXX方法",true)]
        public static void Message(string msg)
        {
            Console.WriteLine(msg);
        }
    }

  当编译程序时会出现如下效果,可导致程序无法生成

以上是三种预定义特性的介绍

下篇文章介绍如何自定义特性:https://blog.csdn.net/lwpoor123/article/details/135104083


http://www.niftyadmin.cn/n/5277128.html

相关文章

GEE机器学习——Classifier.explain()查看训练模型的过程和变量重要性分析

变量重要性 变量重要性分析是一种用于评估模型中每个特征(变量)对模型性能的影响程度的方法。通过分析每个特征的重要性,可以帮助我们理解模型如何利用不同特征来进行预测,并且可以帮助我们选择最重要的特征,以便更好地解释模型和优化模型性能。在本案例种,使用不同机器…

git单分支提交的冲突问题

案例:现在的微服务都有自动生成工具generater,首先通过生成器生成了一些代码,这里成为A版本,在A版本的代码中,修改了部分代码,并git push到远程仓库。这时由于变动,需要追加内容,于是…

C# 获取Excel里引用的外部其他excel文件清单

关键方法:mySheet.Application.ActiveWorkbook.LinkSources(XlLink.xlExcelLinks); 主要代碼如下 Application myExcel null;//引用Excel Application类別 Workbook myBook null;//引用活页簿类別 Worksheet mySheet null;//引用工作表类別 …

反网络爬虫的三个阶段

随着网络爬虫的普及和网络攻击的日益复杂,升级网络安全措施成为保护网站和应用程序免受恶意爬虫侵害的必要举措。本文将深入研究反网络爬虫的三个阶段,并详细探讨IP地址过滤的策略,以提升网络的安全性。 第一部分:反网络爬虫的三…

Macos 删除过期失效的软链接symlink

背景 现在需要卸载python老版本 通过移除以下目录中的对应python版本后 /Library/Frameworks/Python.framework/Versions /Applications 发现 /usr/local/bin 目录下还有老版本python的失效软链接 因此需要批量清除无效的软链接 命令行 系统目录下需要使用sudo实现删除 bre…

深入理解 Rust 中的元编程

元编程是编程技术中的一个高级概念,它涉及在编译时生成、修改代码的能力。Rust 语言支持强大的元编程功能,主要通过宏系统实现。本文将深入探讨 Rust 中的元编程概念,包括宏的基础、派生宏、过程宏的应用,以及如何在 Rust 项目中高…

【大数据存储与处理】实验一 HBase 的基本操作

一、实验目的: 1. 掌握 Hbase 创建数据库表及删除数据库表 2. 掌握 Hbase 对数据库表数据的增、删、改、查。 二、实验内容: 1、题目 0:进入 hbase shell 2、题目 1:Hbase 创建数据库表 创建数据库表的命令:create 表…

C语言实战之条件表达式a?b:c

a?b:c是什么意思? 这个是条件表达式,表示如果a为真,则表达式值为b,如果a为假,则表达式值为c 条件表达式具体说明如下: 条件语句: if(a>b) maxa; else maxb; 可用条件表达式写为 max(a>b)?a:b; 执行该语句的语义是:如a&…