当前位置: 首页 > news >正文

c sharp 特性详解

文章目录

    • 一、特性基础用法
    • 二、常见的内置特性
    • 三、自定义特性
    • 四、通过反射读取特性
    • 五、实际应用场景
    • 六、练习

一、特性基础用法

什么是特性?
特性是一种继承System.Attribute类,用于标记代码元素
特性的语法:

[AttributeName(Parameter1, Parameter2, NamedParameter = Value)]
public class MyClass { /*...*/ }

二、常见的内置特性

  1. [Obsolete] - 标记过时代码
    用于标记方法、类等已过时,编译器会给出警告或错误。

            [Obsolete("该方法已过时,请用NewNethod()")]public void oldMeth(){}[Obsolete("该方法已移除")]public void DeprecatedMethod(){}
    
  2. [Serializable] - 序列化支持
    标记类可以被序列化(如转为 JSON 或二进制)。

            [Serializable]public class person{private string name { get; set; }private int age { get; set; }}
    
  3. [DllImport] - 调用非托管代码
    用于调用外部 DLL 中的函数。

    using System.Runtime.InteropServices;[DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int MessageBox(int hWnd, string text, string caption, int options);
    
  4. [Conditional] - 条件编译
    控制方法的调用是否生效(如调试时保留日志)。

    #define DEBUG // 定义编译符号public class Logger
    {[Conditional("DEBUG")]public static void Log(string message){Console.WriteLine(message);}
    }
    // 调用:仅在 DEBUG 定义时生效
    Logger.Log("Debug mode!");
    

三、自定义特性

你可以通过继承 Attribute 类定义自己的特性。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class AuthorAttribute : Attribute
{public string Name { get; }public DateTime Date { get; set; }public AuthorAttribute(string name){Name = name;}
}

[AttributeUsage]:指定特性的作用目标(类、方法等)和规则。
AttributeTargets:指定应用目标(如 Class, Method, Property 等)。
AllowMultiple:是否允许多次应用同一特性。
Inherited:是否允许派生类继承该特性。

[Author("Alice", Date = "2025-01-01")]
[Author("Bob", Date = "2025-02-01")] // AllowMultiple = true 时允许多次应用
public class MyClass
{[Author("Charlie")]public void MyMethod(){}
}

四、通过反射读取特性

特性本身的逻辑需要通过反射来实现。
示例:读取类的 AuthorAttribute

Type type = typeof(MyClass);
var attributes = type.GetCustomAttributes(typeof(AuthorAttribute), false);foreach (AuthorAttribute author in attributes)
{Console.WriteLine($"作者:{author.Name},日期:{author.Date}");
}

输出:

作者:Alice,日期:2025-01-01
作者:Bob,日期:2025-02-01

五、实际应用场景

  1. 数据验证

    使用特性标记属性的验证规则(如字符串长度、数值范围)。

    using System.ComponentModel.DataAnnotations;
    public class user{[Required(ErrorMessage="用户名不为空")][MaxLength(20)]public String Name { get; set; }}
    
  2. Web API 路由配置
    在 ASP.NET Core 中用 [Route] 和 [HttpGet] 标记路由。

[Route("api/[controller]")]
public class UserController : Controller
{[HttpGet("{id}")]public IActionResult GetUser(int id){}
}
  1. ORM 映射
    使用特性标记类与数据库表的映射关系
[Table("Users")]
public class User
{[Key][Column("UserId")]public int Id { get; set; }
}

六、练习

定义一个 [Range] 特性,用于限制属性的数值范围。

    [AttributeUsage(AttributeTargets.Property)]public class RangeAttribute : Attribute{public int Max { get; }public int Min { get; }public string ErrorMessage { get; set; }public RangeAttribute(int min,int max){Min = min;Max = max;ErrorMessage = $"数值必须在{Min}{Max}之间";}}public class User{[Range(1, 120, ErrorMessage = "年龄必须在 1 到 120 之间。")]public int Age { get; set; }}

相关文章:

c sharp 特性详解

文章目录 一、特性基础用法二、常见的内置特性三、自定义特性四、通过反射读取特性五、实际应用场景六、练习 一、特性基础用法 什么是特性? 特性是一种继承System.Attribute类,用于标记代码元素 特性的语法: [AttributeName(Parameter1, P…...

Langchain vs. LlamaIndex:哪个在集成MongoDB并分析资产负债表时效果更好?

Langchain vs. LlamaIndex:哪个在集成MongoDB并分析资产负债表时效果更好? 随着大语言模型(LLM)在实际应用中的普及,许多开发者开始寻求能够帮助他们更高效地开发基于语言模型的应用框架。在众多框架中,La…...

MySQL日常维护工具------备份

MySQL日常维护工具-备份 一、MySQL字符集 (一)字符集介绍 字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集…...

硬核技术组合!用 DeepSeek R1、Ollama、Docker、RAGFlow 打造专属本地知识库

文章目录 一、引言二、安装Ollama部署DeepSeekR1三、安装Docker四、安装使用RAGFlow4.1 系统架构4.2 部署流程4.3 使用RAGFlow4.4 在RAGFlow中新增模型4.5 创建知识库4.6 创建私人助理使用RGA 一、引言 本地部署DeepSeek R1 Ollama RAGFlow构建个人知识库,通过将…...

[VSCode]彻底卸载和重装,并搭建Java开发环境

VSCode彻底卸载 由于当初是朋友帮忙装的,所以准备卸载,自己装一遍 从控制面板找到 vscode 将其卸载。 此时仅仅是删除了应用软件 删除安装插件 在图示路径中找到 .vscode 文件夹,将其删除,即可彻底清除安装的插件 C:\Users\user\.vscode …...

Scrum方法论指导下的Deepseek R1医疗AI部署开发

一、引言 1.1 研究背景与意义 在当今数智化时代,软件开发方法论对于项目的成功实施起着举足轻重的作用。Scrum 作为一种广泛应用的敏捷开发方法论,以其迭代式开发、快速反馈和高效协作的特点,在软件开发领域占据了重要地位。自 20 世纪 90 …...

政安晨的AI大模型训练实践 九 - 熟悉LLaMA Factory的详细参数含义-基本概念理解一下

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 小伙伴铁子们,上手先熟悉起来训练工具的每一个参数,很重要。 参照我…...

保姆级教程 | Office-Word中图目录制作及不显示图注引文的方法

背景 由于毕业论文的格式修改需要(没错,我终于要拿下PhD了。差不多四个月没更新,主要是①根据处理完的数据完成小论文撰写;②找工作...③完成学位论文的撰写。因而对建模和数据处理的需求不高,对有些时隔久远的博文具…...

Linux lsblk 命令详解:查看磁盘和分区信息 (中英双语)

Linux lsblk 命令详解:查看磁盘和分区信息 在 Linux 系统中,管理磁盘设备和分区是日常运维工作的重要部分。而 lsblk 命令是一个强大的工具,它用于列出系统中的块设备(block devices)信息,可以帮助我们快速…...

使用API有效率地管理Dynadot域名,为域名部署DNS安全拓展(DNSSEC)

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…...

前后端项目部署服务器(传统部署和Docker部署)

内外网 开发环境连外网(8.140.26.187),测试/生产环境连内网(172.20.59.17) 内外网地址不同,但指定的库是同一个 内网IP地址范围包括: 10.0.0.0 到 10.255.255.255172.16.0.0 到 172.31.2551…...

深入HBase——核心组件

引入 通过上一篇对HBase核心算法和数据结构的梳理,我们对于其底层设计有了更多理解。现在我们从引入篇里面提到的HBase架构出发,去看看其中不同组件是如何设计与实现。 核心组件 首先,需要提到的就是HBase架构中会依赖到的Zookeeper和HDFS。…...

虚拟机从零实现机器人控制

1. 系统安装 因Docker不适合需要图形界面的开发,因此使用虚拟机VMware方便可视化界面方式查看效果,相关软件可以从官网下载,这里有一整套免费安装文件百度网盘地址: 2. ROS安装 Ubuntu 22.04:https://docs.ros.org…...

最新本地部署 DeepSeekR1 蒸馏\满血量化版 + WebOpenUI 完整教程(Ubuntu\Linux系统\Ollama)

测试机为6133CPU(40Cores)256G D44*4090D 24G 一种方法是部署蒸馏版Distill模型。一种是部署Huggingface上unsloth的量化版模型 Ollama及模型安装 1.下载并安装ollama curl -fsSL https://ollama.com/install.sh | sh如果下载不动可以试试挂梯子或者再试几次 挂代理代码&…...

Linux基本指令(三)+ 权限

文章目录 基本指令grep打包和压缩zip/unzipLinux和windows压缩包互传tar(重要)Linux和Linux压缩包互传 bcuname -r常用的热键关机外壳程序 知识点打包和压缩 Linux中的权限用户权限 基本指令 grep 1. grep可以过滤文本行 done用于标记循环的结束&#x…...

kafka-集群缩容

一. 简述: 当业务增加时,服务瓶颈,我们需要进行扩容。当业务量下降时,为成本考虑。自然也会涉及到缩容。假设集群有 15 台机器,预计缩到 10 台机器,那么需要做 5 次缩容操作,每次将一个节点下线…...

【nextJs】官网demo学习

最近在看nextjs官方的demo,把一些值得记录的记下来,方便查询; 1.连接数据库 1.1需要把代码传到远程仓库: 执行下面的命令: // 把#后面内容写入readme文件中 echo "# nextjs-dashboard" >> README.…...

在nodejs中使用ElasticSearch(一)安装,使用

使用docker安装ElasticSearch和Kibana 1)创建相应的data文件夹和子文件夹用来持久化ElasticSearch和kibana数据 2)提前创建好elasticsearch配置文件 data/elasticsearch/config/elasticsearch.yml文件 # Elasticsearch Configuration # # NOTE: Elas…...

图的最短路径:Dijkstra算法和Bellman-Ford算法(C++)

上文中我们了解了拓扑排序, 本节我们来学习最短路径的算法. 在图论中, 最短路径问题是指在一个加权图中找到两个节点之间的权重和最小的路径. 最短路径问题是一个基础且重要的主题. 它不仅在理论上具有挑战性, 而且在实际应用中也非常广泛, 比如交通导航, 社交网络分析等. 本…...

【WebGL】fbo双pass案例

双pass渲染案例&#xff08;离线渲染一个三角面&#xff0c;然后渲染到一个占满屏幕的矩阵上&#xff09; 离线渲染如何需要开启深度测试的话&#xff0c;需要额外操作&#xff0c;这里不展开 <!DOCTYPE html> <html lang"en"><head><meta ch…...

【机器学习】CNN与Transformer的表面区别与本质区别

仅供参考 表面区别 1. 结构和原理: CNN:主要通过卷积层来提取特征,这些层通过滑动窗口(卷积核)捕捉局部特征,并通过池化层(如最大池化)来降低特征的空间维度。CNN非常适合处理具有网格状拓扑结构的数据,如图像。Transformer:基于自注意力(Self-Attention)机制,能…...

C++:pthread的使用

pthread 简介 pthread 是 POSIX 线程&#xff08;POSIX Threads&#xff09;的简称&#xff0c;它是 POSIX 标准中定义的线程接口规范。pthread 库提供了一系列函数&#xff0c;用于创建、销毁、同步和管理线程。在类 Unix 系统&#xff08;如 Linux、macOS&#xff09;中&…...

Docker 容器安装 Dify的两种方法

若 Windows 已安装 Docker&#xff0c;可借助 Docker 容器来安装 Dify&#xff1a; 一、方法一 1. 拉取 Dify 镜像 打开 PowerShell 或命令提示符&#xff08;CMD&#xff09;&#xff0c;运行以下命令从 Docker Hub 拉取 Dify 的镜像&#xff08;Docker Hub中找到该命令行&…...

nodejs:express + js-mdict 作为后端,vue 3 + vite 作为前端,在线查询英汉词典

向 doubao.com/chat/ 提问&#xff1a; node.js js-mdict 作为后端&#xff0c;vue 3 vite 作为前端&#xff0c;编写在线查询英汉词典 后端部分&#xff08;express js-mdict &#xff09; 1. 项目结构 首先&#xff0c;创建一个项目目录&#xff0c;结构如下&#xff1…...

mysql之事务深度解析与实战应用:保障数据一致性的基石

文章目录 MySQL 事务深度解析与实战应用&#xff1a;保障数据一致性的基石一、事务核心概念与原理1.1 事务的本质与意义1.2 事务的 ACID 特性1.2.1 原子性 (Atomicity)1.2.2 一致性 (Consistency)1.2.3 隔离性 (Isolation)1.2.4 持久性 (Durability) 1.3 事务隔离级别与并发问题…...

einops测试

文章目录 1. einops2. code3. pytorch 1. einops einops 主要是通过爱因斯坦标记法来处理张量矩阵的库&#xff0c;让矩阵处理上非常简单。 conda : conda install conda-forge::einopspython: 2. code import torch import torch.nn as nn import torch.nn.functional as…...

华为云deepseek大模型平台:deepseek满血版

华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 1、注册&#xff1a; 华为云deepseek大模型平台注册&#xff1a;https://cloud.siliconflow.cn/i/aDmz6aVN 说明&#xff1a;填写邀请码的话邀请和被邀请的账号都会获得2000 万 Tokens&#xff1b;2个帐号间不会与其他关联…...

Elasticsearch Open Inference API 增加了对 Jina AI 嵌入和 Rerank 模型的支持

作者&#xff1a;Hemant Malik 及 Joan Fontanals Martnez 探索如何使用 Elasticsearch Open Inference API 访问 Jina AI 模型。 我们在 Jina AI 的朋友们将 Jina AI 的嵌入模型和重新排名产品的原生集成添加到 Elasticsearch 开放推理 API 中。这包括对行业领先的多语言文本嵌…...

在PHP Web开发中,实现异步处理有几种常见方式的优缺点,以及最佳实践推荐方法

1. 消息队列 使用消息队列&#xff08;如RabbitMQ、Beanstalkd、Redis&#xff09;将任务放入队列&#xff0c;由后台进程异步处理。 优点&#xff1a; 任务持久化&#xff0c;系统崩溃后任务不丢失。 支持分布式处理&#xff0c;扩展性强。 实现步骤&#xff1a; 安装消息…...

如何设计app测试用例

功能测试 测试方法&#xff1a;等价类划分法、边界值法、场景法、因果图法。优先级设定&#xff1a;核心业务功能设为高优先级。需求覆盖 正向场景、反向场景、关联接口串场景 与后端开发确认测试用例是否全面覆盖后端逻辑。和产品确认用例是否覆盖本次需求&#xff0c;以及是否…...

《炒股养家心法.pdf》 kimi总结

《炒股养家心法.pdf》这篇文章详细阐述了一位超级游资炒股养家的心得与技巧&#xff0c;展示了其从40万到10亿的股市传奇。以下是文章中炒股技巧和心得的详细总结&#xff1a; 1.核心理念 市场情绪的理解&#xff1a;炒股养家强调&#xff0c;股市的本质是群体博弈&#xff0c…...

DVWA 靶场

DVWA 靶场的通关 刚建立和使用 输入 http://dvwa:8898/setup.php //进入用户名 密码 dvwa 你自己设计的想要进入数据库 点击creat 用户名 密码 admin passwordAttack type Sniper模式 在Sniper模式下&#xff0c;Payload字典用于逐个替换请求中标记的位置。例如&#x…...

【C语言】(一)数据在计算机中的存储与表示

目录 一、存储单位&#xff08;比特/字节&#xff09; 二、数制/进制&#xff08;二/八/十/十六&#xff09; 三、码制&#xff08;原码/反码/补码/移码&#xff09; 四、二进制表示小数 &#xff08;一&#xff09;定点数 &#xff08;二&#xff09;浮点数 十进制转化…...

大语言模型微调的公开JSON数据

大语言模型微调的公开JSON数据 以下是一些可用于大语言模型微调的公开JSON数据及地址: EmoLLM数据集 介绍:EmoLLM是一系列能够支持理解用户、帮助用户心理健康辅导链路的心理健康大模型,其开源了数据集、微调方法、训练方法及脚本等。数据集按用处分为general和role-play两种…...

solidity之Foundry安装配置(一)

一门面向合约的高级编程语言&#xff0c;主要用来编写以太坊只能合约。 Solidity受C语言&#xff0c;Python和js影响&#xff0c;但为编译成为以太坊虚拟机字节码在EVM上执行&#xff0c;很多特性和限制都和EVM相关。 Solidity 是静态类型语言&#xff0c;支持继承、库、自定义…...

【个人开源】——从零开始在高通手机上部署sd(二)

代码&#xff1a;https://github.com/chenjun2hao/qualcomm.ai 推理耗时统计 单位/ms 硬件qnncpu_clipqnncpu_unetqnncpu_vaehtp_cliphtp_unethtp_vae骁龙8 gen124716.994133440.39723.215411.097696.327 1. 下载依赖 下载opencv_x64.tar,提取码: rrbp下载opencv_aarch64.t…...

【精调】LLaMA-Factory 快速开始4 自定义个一个sharegpt数据集并训练

数据格式说明 LLaMA Factory:微调LLaMA3模型实现角色扮演 数据集 参考 开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B-LoRA微调-LLaMA-Factory-单机单卡-V100(一) 大神给出的数据集的讲解:注册 如...

【Java】单例模式

单例模式 所谓类的单例设计模式&#xff0c;就是采取一定的方法保证在整个的软件系统中&#xff0c;对某个类只能存在一个对象实例&#xff0c;并且该类只提供一个取得其对象实例的方法。 单例模式包含懒汉式和饿汉式&#xff0c;运行有且仅有一个实例化对象&#xff0c;只会…...

REACT--组件通信

组件之间如何进行通信&#xff1f; 组件通信 组件的通信主要借助props传递值 分为整体接收、解构接收 整体接收 import PropTypes from prop-types;//子组件 function Welcome(props){return (<div>hello Welcome,{props.count},{props.msg}</div>) }// 对 We…...

第16届蓝桥杯模拟赛3 python组个人题解

第16届蓝桥杯模拟赛3 python组 思路和答案不保证正确 1.填空 如果一个数 p 是个质数&#xff0c;同时又是整数 a 的约数&#xff0c;则 p 称为 a 的一个质因数。 请问&#xff0c; 2024 的最大的质因数是多少&#xff1f; 因为是填空题&#xff0c;所以直接枚举2023~2 &am…...

FFMPEG编码容错处理解决办法之途径----升级库文件

在qt开发环境下接收网络数据&#xff0c;调用ffmpeg解码播放视频&#xff0c;出现闪屏现象&#xff0c;具体现象可以使用操作系统自带的ffplay播放器播放原始视频流可复现&#xff1b;而使用操作系统自带的mpv播放器播放视频则不会出现闪屏&#xff1b;闪屏时会报Could not fin…...

kkFileView报错no office manager available

背景 部署环境:虚机Linux系统 发生问题的版本:4.1.0-SNAPSHOT 现象:有的docx文件可以预览,有的不可以。不可以的就怎么打开都不可以(不管你是躺着,站着,坐着,睡着,趴着都不行,哈哈) 报错内容 贴出主要的报错内容步骤: > no office manager available > tr…...

C++ 设计模式-模板方法模式

文件处理 #include <iostream>// 抽象基类&#xff1a;定义模板方法和抽象步骤 class DataProcessor { public:// 模板方法&#xff08;固定流程&#xff09;void Process() {OpenFile();ProcessData(); // 由子类实现CloseFile();}protected:virtual void ProcessData…...

MacOS下使用Ollama本地构建DeepSeek并使用本地Dify构建AI应用

目录 1 大白话说一下文章内容2 作者的电脑配置3 DeepSeek的本地部署3.1 Ollamal的下载和安装3.2 选择合适的deepseek模型3.3 安转deepseek 4 DifyDeepSeek构建Al应用4.1 Dify的安装4.1.1 前置条件4.1.2 拉取代码4.1.3 启动Dify 4.2 Dify控制页面4.3 使用Dify实现个“文章标题生…...

区块链相关方法-波士顿矩阵 (BCG Matrix)

波士顿矩阵&#xff08;BCG Matrix&#xff09;&#xff0c;又称市场增长率 - 相对市场份额矩阵、波士顿咨询集团法、四象限分析法、产品系列结构管理法等&#xff0c;由美国著名的管理学家、波士顿咨询公司创始人布鲁斯・亨德森于 1970 年首创1。以下是关于波士顿矩阵的详细介…...

命令执行漏洞 Command Execute

命令执行漏洞&#xff08;Command Injection&#xff09;是一种安全漏洞&#xff0c;指的是攻击者能够在应用程序的命令行中注入并执行恶意命令。简单来说&#xff0c;就是攻击者可以利用这个漏洞让程序执行自己指定的命令&#xff0c;而不是程序原本应该执行的命令。 举个例子…...

黑马点评_商品信息缓存模块

保证缓存不要有空档期 删除后马上要写入中间不能插入任何阶段(如查询数据库) 对于单体系统1&#xff0c;将缓存与数据库操作放在同一个事务中&#xff08;当前项目就是一个单体项目&#xff0c;所以选择这种方式&#xff09; 对于分布式系统2&#xff0c;利用TCC&#xff08;Tr…...

socket()函数的概念和使用案例

socket()函数的概念&#xff08;C语言&#xff09; 在C语言中&#xff0c;socket() 函数是用于创建一个新的套接字&#xff0c;它是网络编程的基础。套接字可以看作是不同计算机进程间通信的一个端点&#xff0c;允许数据在网络中的发送和接收。 socket() 函数的原型定义在 &l…...

【架构】事件驱动架构(Event - Driven Architecture,EDA)

一、事件驱动架构理论基础 事件驱动架构(Event - Driven Architecture,EDA)是一种软件设计范式,事件驱动的体系结构由生成事件流、侦听这些事件的事件使用者以及将事件从生成者传输到使用者的事件通道组成。 在事件驱动架构中,系统的行为由事件触发。事件可几乎实时发送,…...

三、linux字符驱动详解

在上一节完成NFS开发环境的搭建后&#xff0c;本节将探讨Linux字符设备驱动的开发。字符设备驱动作为Linux内核的重要组成部分&#xff0c;主要负责管理与字符设备&#xff08;如串口、键盘等&#xff09;的交互&#xff0c;并为用户空间程序提供统一的读写操作接口。 驱动代码…...