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

什么是特性?

特性(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/259836.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实时化与 Serverless 是开源大数据 3.0 时代的必然选择

近日在 2023 云栖大会上,阿里云开源大数据产品进行了年度发布:E-MapReduce、Elasticsearch 等开源大数据产品全面 Serverless 化;创新性推出 Flink 与 Paimon 搭档的新一代流式湖仓;拥抱 AI,推出 Milvus 全托管服务&am…

基于SSM+Vue的新闻管理系统

基于SSMVue的新闻管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 新闻列表 管理员界面 用户界面 摘要 新闻管理系统基于SSM(Spr…

C# 使用NUnit进行单元测试

写在前面 NUnit是一个开源的.Net单元测试框架,经常被用来在.Net体系下做白盒测试。 NUnit.org GitHub 本文记录一个简单的使用NUnit进行单元测试的完整流程。 代码实现 新建一个目标类库NUnitTester,添加待测试的类文件,内容如下&#…

GLTF/GLB模型在线预览、编辑、动画查看以及材质修改

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 GLTF在线编辑器提供了一个内置的模型查看器,可以加载和预…

最新国内可用使用GPT4.0,GPT语音对话,Midjourney绘画,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画,相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和用户进行创作交流。 然而,GP…

使用TikTok云手机轻松拓展全球市场

TikTok作为一款风靡全球的短视频应用,全球影响力不断扩大。越来越多的商家开始借助TikTok分享作品、在海外市场上获取商业机会。要想更好地借助TikTok扩大海外市场,使用TikTok云手机是一个好选择。本文将介绍TikTok云手机的几大作用,以助您更…

LVS+keepalived 高可用负载均衡

目录 工具: keepalived (专为LVS和HA设计的一款健康检查工具) 协议:VRRP协议 一个合格的集群,应该具备哪些特性: 健康检查(探针)的方式: 主备切换&#xff1a…

nodejs微信小程序+python+PHP柚子校园影院系统-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

JavaGUI(但期末速成版)之JFrame和JDialog

前言 学到期末发现越来越没时间来细写这些东西了,毕竟蒟蒻博主的发展方向主要需要学的不是Java,但为了期末高分通过,也不得不花一些精力上来,于是有了这样一篇速成GUI,本篇会以十分精简的语言来学习,主打一…

Linux:(登录后/退出后)—自动执行脚本或者命令

系统:centos7 登录后 自动执行脚本或者命令至少有三种 都是把要执行的语句写进文件里 /etc/profile ~/.bash_profile /etc/rc.d/rc.local 登录后自动执行脚本或者命令的方式有很多,网上大多数说的都是在 /etc/rc.d/rc.local 所以我主要讲解一下后两种。需要第…

nodejs+vue+微信小程序+python+PHP柚子校园影院系统-计算机毕业设计推荐

柚子校园影院综合网络空间开发设计要求。目的是将系统传统管理方式转换为在网上管理,完成信息管理的方便快捷、安全性高、交易规范做了保障,目标明确。柚子校园影院可以将功能划分为管理员功能和用户功能。  而开发本系统,又能够提高系统整体…

2024亚洲(春季)户外露营展览会在深圳启幕!共话户外露营生活流行风向

COSP2024深圳进出口户外用品贸易展,将于2024年3月14日至16日在深圳会展中心(福田馆)盛大举行。作为华南地区户外行业的顶级开年盛会,本次展会将汇聚600多家行业知名企业和60,000多名专业采购观众,共同聚焦户外全产业链…

大数据处理与分析-Spark

导论 (基于Hadoop的MapReduce的优缺点) MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架 MapReduce是一种用于处理大规模数据集的编程模型和计算框架。它将数据处理过程分为两个主要阶段:Map阶…

Leetcode—75.颜色分类【中等】

2023每日刷题&#xff08;六十五&#xff09; Leetcode—75.颜色分类 实现代码 class Solution { public:void sortColors(vector<int>& nums) {int red 0, white 0, blue 0;for(auto num: nums) {if(num 0) {red;} else if(num 1) {white;} else {blue;}}for…

Xcode 恢复Discard Changes

当开发的时候&#xff0c;Discard All Changes后 文件的修改都被放弃了&#xff0c;怎么才可以撤销更改呢 Xcode和Git没有这个功能&#xff0c;Finder可以实现 首先我们先退出Xcode用TextEdit打开你想恢复的文件转到文件 > 还原到 > 浏览所有版本...选择你想恢复的版本即…

C# WPF上位机开发(文件对话框和目录对话框)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 一个上位机软件在处理数据的时候&#xff0c;除了配置文件、数据文件之外&#xff0c;一般还需要使用选择对话框进行文件和目录的选取。如果不这样…

C# WPF上位机开发(多线程中锁的使用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 多线程编程一般都会涉及到锁的时候&#xff0c;很多人可能觉得很意外&#xff0c;为什么会需要这么一个锁。本质上&#xff0c;这主要还是因为多线…

基于RocketMQ实现分布式事务

前言 在上一篇文章Spring Boot自动装配原理以及实践我们完成了服务通用日志监控组件的开发&#xff0c;确保每个服务都可以基于一个注解实现业务功能的监控。 而本文我们尝试基于RocketMQ实现下单的分布式的事务。可能会有读者会有疑问&#xff0c;之前我们不是基于Seata完成了…

Pycharm 关闭控制台多余窗口详解(console)

文章目录 1 问题描述2 解决办法2.1 步骤1&#xff1a;编辑配置2.2 步骤2&#xff1a;使用 Python 控制台运行&#xff08;取消勾选&#xff09;2.3 验证&#xff1a;再次运行&#xff0c;多余窗口消失 1 问题描述 2 解决办法 2.1 步骤1&#xff1a;编辑配置 菜单路径&#xf…

精细经营:为 Web3 游戏长期卓越奠定基石

作者&#xff1a;lesleyfootprint.network 随着越来越多的人涌入 Web3 游戏世界&#xff0c;构建精细化运营体系成为保持项目长期发展的关键。充分利用数据分析对于明智的决策至关重要&#xff0c;它能揭示用户行为、交易模式和市场趋势的内在奥秘。 基于数据驱动的决策、风险…