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

news2024/11/25 15:45:54

什么是特性?

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

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

预定义特性

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

  • AttributeUsage
  • Conditional
  • obsolete

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.coloradmin.cn/o/1325542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix 中开启报表服务

要在 Zabbix 中开启报表服务并安装必要的组件,您需要按照以下步骤操作: 1. 修改 Zabbix Server 配置 编辑 Zabbix Server 配置文件: vim /etc/zabbix/zabbix_server.conf在文件中找到以下两个参数并进行修改: StartReportWrit…

MLX vs MPS vs CUDA:苹果新机器学习框架的基准测试

如果你是一个Mac用户和一个深度学习爱好者,你可能希望在某些时候Mac可以处理一些重型模型。苹果刚刚发布了MLX,一个在苹果芯片上高效运行机器学习模型的框架。 最近在PyTorch 1.12中引入MPS后端已经是一个大胆的步骤,但随着MLX的宣布&#x…

Catboost算法助力乳腺癌预测:Shap值解析关键预测因素

一、引言 乳腺癌是一种常见的恶性肿瘤,对女性健康和生命造成严重威胁。乳腺癌的预测和治疗是当前研究的热点和难点。传统的预测方法主要基于临床病理学特征,但准确率有待提高。随着机器学习技术的发展,数据驱动的预测方法逐渐受到关注。Catbo…

ChatGPT如何计算token数?

GPT 不是适用于某一门语言的大型语言模型,它适用于几乎所有流行的自然语言。所以 GPT 的 token 需要 兼容 几乎人类的所有自然语言,那意味着 GPT 有一个非常全的 token 词汇表,它能表达出所有人类的自然语言。如何实现这个目的呢?…

EDI能够为企业间信息传输带来哪些帮助?

EDI全称电子数据交换,它的历史可以追溯到 1960 年代,从供应链和物流到医疗保健和金融都可以看到EDI的身影,没有任何行业限制。尽管EDI技术已经在国外得到广泛使用,国内自研EDI软件产品也已有十余年的历史,但国内目前的…

大数据----33.hbase中的shell文件操作

HBase的命令行工具,最简单的接口,适合HBase管理使用,可以使用shell命令来查询HBase中数据的详细情况。 注意:如果进入hbase后长时间不操作; 发生hbase自动关闭没有了进程; 原因是内存不够;可以关…

leetCode算法—11. 盛最多水的容器

11.给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 难度:中等 ** 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#x…

Deap 框架细节介绍

创建一个 gp.PrimitiveSet 对象&#xff0c;对象名为 MAIN&#xff0c;自变量为 3 pset gp.PrimitiveSet("MAIN", 3) print(pset)<deap.gp.PrimitiveSet object at 0x000001FBE182AB20>gp.py&#xff08;均为产生函数集与节点集&#xff09; PrimitiveSet …

State of PostgreSQL 2023 报告解读

基于 PostgreSQL 内核的时序数据库厂商 Timescale 发布了一年一度的 State of Postgres 2023 报告。 Timescale 介绍 简单先介绍一下 Timescale 这家公司的历史。它最早是提供了一个 PG 的插件&#xff0c;引入了 Hypertable 这个概念&#xff0c;来高效地处理时序数据&…

分享一个项目——Sambert UI 声音克隆

文章目录 前言一、运行ipynb二、数据标注三、训练四、生成总结 前言 原教程视频 项目链接 运行一个ipynb&#xff0c;就可操作 总共四步 1&#xff09;运行ipynb 2&#xff09;数据标注 3&#xff09;训练 4&#xff09;生成 一、运行ipynb 等运行完毕后&#xff0c;获得该…

mt5和mt4交易软件有什么区别?

MetaTrader 4&#xff08;MT4&#xff09;和MetaTrader 5&#xff08;MT5&#xff09;是两种广泛使用的外汇和金融市场交易平台&#xff0c;由MetaQuotes公司开发。尽管它们都是外汇交易的常见选择&#xff0c;但在功能和特性上存在一些区别。以下是MT4和MT5之间的主要区别&…

2023 英特尔On技术创新大会直播 |我感受到的“芯”魅力

文章目录 每日一句正能量前言AI时代&#xff0c;云与PC结合为用户带来更好体验全新处理器&#xff0c;首次引入针对人工智能加速的NPU大模型时代&#xff0c;软硬结合带来更好训练成果后记 每日一句正能量 成长是一条必走的路路上我们伤痛在所难免。 前言 在2023年的英特尔On技…

Go语言HTTP编程入门指南

如果你是一名开发者&#xff0c;那么你一定听说过Go语言。Go&#xff0c;也被称为Golang&#xff0c;是由Google开发的一种静态类型、编译型语言。它的设计理念是“简单、快速、高效”&#xff0c;这使得Go语言在许多方面都表现出色&#xff0c;尤其是在网络编程和并发编程方面…

fastGitHub工具推荐(如果打不开github或者使用很慢可以使用该工具)

目录 一&#xff0c;针对问题二&#xff0c;下载1&#xff0c;github里面下载FastGitHub2&#xff0c;博客上传了下载资源 三&#xff0c;安装使用点击执行文件即可 一&#xff0c;针对问题 当使用github很慢&#xff0c;或者根本打不开的时候&#xff0c;就可以使用该工具 …

HDFS NFS Gateway(环境配置,超级详细!!)

HDFS NFS Gateway简介: ​ HDFS NFS Gateway是Hadoop Distributed File System&#xff08;HDFS&#xff09;中的一个组件&#xff0c;它允许客户端通过NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;与HDFS进行交互。具体来说&#xff0c;HDFS NFS…

搭建esp32-idf开发环境并烧入第一个程序

ESP32下载idf并烧入第一个程序 一.官网下载idf安装包二.安装idf三 .测试安装是否成功3.1进入idf控制台3.2 查看安装版本3.3 编译工程 四.下载程序4.1查看所在端口4.2下载程序4.3 监听串口 一.官网下载idf安装包 点击下载 如图&#xff1a; 我们选择离线下载&#xff0c;注意…

行业前景咋样?大厂找我用C++抓取化工产品数据并分析

最近又来活了&#xff0c;天天忙到半夜&#xff0c;但是想想收益还是再坚持坚持。是这么一回事&#xff0c;兄弟所在的化工公司最近想看看某些行业数据&#xff0c;看看市面的同类型产品销量收益等情况是否满足预期效果&#xff0c;也就找到我让我给用爬虫写一个采集并分析的报…

如何实现设备联网控制?

在工业自动化领域&#xff0c;设备联网控制已经成为一种趋势。通过设备联网&#xff0c;可以实现设备的远程监控和管理&#xff0c;提高设备的可用性和效率。本文将介绍如何实现设备联网控制。 设备如何联网&#xff1f; 使用网关联网&#xff1a; HiWoo Box是一款功能强大的…

Sectigo的ov多域名ssl证书

OV多域名SSL证书和EV多域名SSL证书都只支持企事业单位申请&#xff0c;但是EV多域名SSL证书审核比较严格&#xff0c;价格也比较高&#xff0c;OV多域名SSL证书能加密网站传输数据&#xff0c;也能对服务器身份进行认证。对于大多数事业单位&#xff0c;OV多域名SSL证书就能满足…

外贸业务员该如何写好一份有质感的年终总结?内附外贸大神例文

庄子云&#xff1a;人生天地之间&#xff0c;若白驹之过隙&#xff0c;忽然而已... 2023年注定是不平凡的一年&#xff0c;临近年终&#xff0c;你可能听到最多的关键词就是外贸有点难做。不管是因为什么&#xff0c;客观来说2023年的外贸之路确实不太平坦&#xff0c;最近胡塞…