9、C#【进阶】特性

news/2024/7/25 21:58:30/文章来源:https://blog.csdn.net/AMrss/article/details/139078058

特性

在这里插入图片描述

文章目录

      • 1、特性概念
      • 2、自定义特性 Attribute
      • 3、特性的使用
      • 4、限制自定义特性的使用范围
      • 5、系统自带特性
        • 1、过时特性
        • 2、调用者信息特性
        • 3、条件编译特性
        • 4、外部dll包函数特性

1、特性概念

特性是一种允许我们向程序的程序集添加元数据的语言结构
它是用于保存程序机构信息的某种特殊类型的类特性本质是个类
可以利用特性类为元数据添加额外信息
比如一个类、成员变量、成员方法等为它们添加更多额外信息
之后可以通过反射来获取这些额外信息

2、自定义特性 Attribute

继承特性基类 Attributeclass MyCustomAttribute : Attribute{public string info;public MyCustomAttribute(string info){this.info = info;}public void TestFun(){Console.WriteLine("特性的方法");}}

3、特性的使用

基本语法:
[特性名(参数列表)]
本质上就是在调用特性类的构造函数
写在类、函数、变量的上一行,表示他们具有该特性信息//特性的使用
MyClass myClass = new MyClass();
Type type = myClass.GetType();//判断是否使用了某个特性
//参数一:特性的类型
//参数二:代表是否搜索继承链(属性和事件忽略此参数)
if (type.IsDefined(typeof(MyCustomAttribute), false))
{Console.WriteLine("这个类使用了MyCustom特性");
}//获取Type元数据中的所有特性
object[] array = type.GetCustomAttributes(true);
for (int i = 0; i < array.Length; i++)
{if (array[i] is MyCustomAttribute){Console.WriteLine((array[i] as MyCustomAttribute).info);(array[i] as MyCustomAttribute).TestFun();}}声明特性
[MyCustom("类")]
class MyClass
{[MyCustom("成员变量")]public int value;[MyCustom("成员方法")]public void TestFun([MyCustom("函数参数")] int a){}
}

4、限制自定义特性的使用范围

//通过为特性类 加特性 限制其使用范围
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = true, Inherited = true)]
//参数一:AttributeTargets —— 特性能够用在哪些地方
//参数二:AllowMultiple —— 是否允许多个特性实例用在同一个目标上
//参数三:Inherited —— 特性是否能被派生类和重写成员继承
public class MyCustom2Attribute : Attribute{}

5、系统自带特性

1、过时特性
//过时特性
//Obsolete
//用于提示用户 使用的方法等成员已经过时 建议使用新方法
//一般加在函数前的特性class TestClass
{//参数一:调用过时方法时 提示的内容//参数二:true报错  false警告[Obsolete("OldSpeak方法已经过时了,请使用Speak方法", false)]public void OldSpeak(string str){Console.WriteLine(str);}public void Speak(){}public void SpeakCaller(string str, [CallerFilePath]string fileName = "", [CallerLineNumber]int line = 0, [CallerMemberName]string target = ""){Console.WriteLine(str);Console.WriteLine(fileName);Console.WriteLine(line);Console.WriteLine(target);}
}
2、调用者信息特性
哪个文件调用CallerFilePath特性
哪一行调用CallerLineNumber特性
哪个函数调用CallerMemberName特性//需要引用命名空间 using System.Runtime.CompilerServices;
//一般作为函数参数的特性
3、条件编译特性
条件编译特性
Conditional
它会和预处理指令 #define配合使用//需要引用命名空间using System.Diagnostics;
//主要可以用在一些调试代码上#define Fun
[Conditional("Fun")]
static void Fun(){}
4、外部dll包函数特性
DllImport
用来标记非.Net(C#)的函数,表明该函数在一个外部的DLL中定义。
一般用来调用 C或者C++的Dll包写好的方法
//需要引用命名空间 using System.Runtime.InteropService[DllImport("Test.dll")]static extern int Add(int a,int b);

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

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

相关文章

全网首发!精选32个最新计算机毕设实战项目(附源码),拿走就用!

Hi 大家好&#xff0c;马上毕业季又要开始了&#xff0c;陆陆续续又要准备毕业设计了&#xff0c;有些学生轻而易举就搞定了&#xff0c;有些学生压根没有思路怎么做&#xff0c;可能是因为技术问题&#xff0c;也可能是因为经验问题。 计算机毕业相关的设计最近几年类型比较多…

Docker 开启 SSL 验证

最近看 OJ 项目的远程开发阶段&#xff0c;然后踩坑踩了 2 天&#x1f602; Docker 版本&#xff1a;在 CentOS 安装 sudo yum install docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io Client: Docker Engine - CommunityVersion: 20.10.9API version: …

如何远程访问Redis?

远程访问Redis是一种常见的需求&#xff0c;特别是在分布式系统或跨地域网络中。通过远程访问&#xff0c;我们可以轻松地对远程的Redis数据库进行操作和管理。 天联保障数据安全 对于远程访问Redis的安全性问题&#xff0c;我们可以借助天联来保障数据的安全。天联是一种基于…

Pytorch创建张量

文章目录 1.torch.from_numpy()2. torch.zeros()3. torch.ones()4. torch.arange()5. torch.linspace()6. torch.logspace()7. torch.eye()8. torch.empty()9. torch.full()10. torch.complex()10. torch.rand()10. torch.randint()11. torch.randn12. torch.normal()13. torch…

概率分布函数与误差函数的关系

正态函数&#xff08;高斯分布&#xff09; 对其求[b,x]区间的积分 标准误差函数 以下两个方程相等&#xff08;a,b取值任意&#xff09; 两个函数重合 可知正态函数 f(t) 在[b,x]的区间上积分等于 引用desmos计算器&#xff1a;Desmos | Lets learn together.

9.4 Go语言入门(运算符)

Go语言入门&#xff08;运算符&#xff09; 目录三、运算符1. 算术运算符2. 关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 其他运算符7. 运算符优先级 目录 Go 语言&#xff08;Golang&#xff09;是一种静态类型、编译型语言&#xff0c;由 Google 开发&#xff0c;专注…

他用AI,抄袭了我的AI作品

《大话西游》里面有一句经典台词&#xff1a;每个人都有一个妈&#xff0c;但是“你妈就一定是你妈吗&#xff1f;” 用AI创作的艺术作品&#xff0c;也走进类似的困境&#xff1a;如何证明你用AI生成的作品&#xff0c;就是你的作品&#xff1f; 近日&#xff0c;腾讯科技独…

编程-辅助工具-Git下载

文章目录 1、前言2、Git官网地址3、迅雷下载 1、前言 采用Git能下载github上的代码&#xff0c;其下载是采用官网下载的&#xff0c;但是下载速度比较慢&#xff0c;网上也推荐了镜像的方式&#xff0c;但是有些链接失效了&#xff0c;突然有一天想起用迅雷是不是合适&#xf…

【Sql Server】随机查询一条表记录,并重重温回顾下存储过程的封装和使用

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂》。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言随机查询语…

AI办公自动化:用kimi批量将word文档部分文件名保存到Excel中

文件夹中有很多个word文档&#xff0c;现在只要英文部分的文件名&#xff0c;保存到一个Excel文件中。 可以在kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个编写Python脚本的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;…

Linux IO模型深度解析与实战应用

linux的5种IO模型 一、这里IO是什么 操作系统设有用户态与内核态,确保系统安全。应用程序默认在用户态运行,而执行如IO操作等底层任务时,需切换至内核态以高效执行。 服务器从网络接收的大致流程如下: 1、数据通过计算机网络来到了网卡 2、把网卡的数据读取到 socket 缓…

将 KNX 接入 Home Assistant 之一 准备硬件

不久前有人小伙伴买了usb转knx ,详情请看 一个 usb 转 knx 的模块 然后想通过这个设备接入 Home Assistant。 后来了解了一下 Home Assistant 并不直接支持 usb转KNX的接入&#xff0c;需要通过KNXD插件转接才行。 然而尝试了很多次叶没有成功&#xff0c;使用西门子的usb接口以…

Android面试题之Kotlin常见集合操作技巧

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 list 创建和修改 不可变list,listOf var list listOf("a","d","f") println(list.getOrElse(3){"Unkn…

关于高性能滤波器和普通型滤波器的区别说明

高性能滤波器和普通型滤波器在性能和滤波效果上存在显著差异。以三安培为代表分析高性能滤波器和普通型滤波器的区别&#xff1a; 从上图曲线可看出&#xff1a; 1.高性能滤波器和普通型滤波器的滤波范围不同。普通型滤波器有效滤波范围为 150KHz~30MHz&#xff0c;而高性能滤…

蓝牙Mesh模块多跳大数据量高带宽传输数据方法

随着物联网技术的飞速发展&#xff0c;越来越多的设备需要实现互联互通。蓝牙Mesh网络作为一种低功耗、高覆盖、易于部署的无线通信技术&#xff0c;已经成为物联网领域中的关键技术之一。在蓝牙Mesh网络中&#xff0c;节点之间可以通过多个跳数进行通信&#xff0c;从而实现大…

剪画小程序:”霸屏各大平台“的黏土滤镜是怎么制作的呢?

最近&#xff0c;网上出现大量“黏土”风格的人物照片。尤其是在社交平台&#xff0c;这类型的分享数量急剧上升。 这是马斯克开车的样子 还有这张是周杰伦七里香的专辑图片 一张照片&#xff0c;十几秒钟&#xff0c;就能还原出你在黏土世界的样子。 以上这些照片是用-【剪画…

解决SpringBoot中插入汉字变成?(一秒解决)

在这里url后面加一行配置即可&useUnicodetrue&characterEncodingUTF-8即可 解释 spring.datasource.url: 这里包含了数据库的URL&#xff0c;以及额外的参数如useUnicodetrue用于启用Unicode字符集支持&#xff0c;characterEncodingUTF-8用于指定字符编码为UTF-8&…

idea2024 nacos中文报错

idea2024 nacos中文报错 报错提示为&#xff1a;Input length 1 报错原因&#xff1a;项目启动编码与nacos编码不一致。 处理方式 添加启动参数utf8修改项目编码格式为utf8 修改idea.vmoptions Help -> Edit Custom 添加一行&#xff1a;-Dfile.encodingUTF-8

Django与微服务架构:构建可扩展的Web应用

title: Django与微服务架构&#xff1a;构建可扩展的Web应用 date: 2024/5/21 20:15:19 updated: 2024/5/21 20:15:19 categories: 后端开发 tags: 微服务Django负载均衡RESTfulAPI网关容器化监控安全 前言 在当今快速发展的软件开发领域&#xff0c;微服务架构已经成为构建…

情感分析及数据集代码解析

15.1. 情感分析及数据集 — 动手学深度学习 2.0.0 documentation (d2l.ai) 代码 import os import torch from torch import nn from d2l import torch as d2l#save d2l.DATA_HUB[aclImdb] (http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz,01ada507287d828…