开发应用时如何利用C#自定义属性

C#编程-自定义属性 让我们继续漏洞修复示例,在这个示例中新的自定义属性被命名为BugFixingAttribute。通常的约定是在属性名称后添加单词Attribute。编译器通过允许您调用具有短版名称的属性来支持附加。在上述代码段中,编译器首先寻找名为BugFixing的属性的定义。没有找到BugFixing属性的定义时,寻找BugFixingAttribute属性的定义。每个属性必须至少包含一个构造函数。在下面的漏洞修复示例中,漏洞编号、开发人员姓名、修复日期是定位参数,标记是命名参数。getsetget。 阅读详情

本文可以从技术文章下载出获得,其中包含了一个使用定制属性的Visual Studio项目示例文件。

属性类是设计时可应用于类、properties和方法的特殊文类。属性类提供描述元素某些方面属性的方式或决定依附于该元素的其它类的行为,进而在运行时可以访问和检验这些描述与行为。你可以将属性类看作为类成员添加特殊修改器的一种方式。

例如,如果你曾经写过Web服务,那肯定知道要使得方法在整个服务中是公开的,必须要使用WebMethod属性。这是一个演示属性应用的很好的例子,因为我们要用WebMethod属性扩展编程模型。C#中没有内建的方式来指定某个方法通过Web服务是可见的(因为内建有表明一个方法是私有的方式),因此需要添加WebMethod属性来满足这一需要。

设计自定义属性

设计自定义属性的过程十分简单,在设计属性前只需要考虑以下几个方面:

◆使用属性的目的是什么?



属性可以以很多方式使用。你需要定义属性到底要完成什么功能并确保这些特定功能没有内建在.NET框架集中。使用.NET修改器要比使用属性好,因为这将简化同其它装配件的集成过程。

◆属性必须储存什么信息?



属性是打算用来指示某个功能的简单标志吗?或者属性是否要储存信息?一个属性可以拥有设计时赋予的一组信息,并在运行时查看这些信息。例如,看一下示例应用中的别名属性。

◆属性应该驻留在哪个装配件中?

大多数情况下,可以将属性包含在使用该属性的装配件中。不过也有这样的例子,将属性驻留在公共的、轻量级的、共享装配件中会更好些。这种类型的配置允许客户使用属性时不必引用不需要的装配件。

◆哪些装配件将会识别属性?



如果没有模块读取属性,那么它将一文不值。你很可能将读取属性的类放在属性驻留的同一个装配件中。然而,正像前面提到的,也有这样的例子,你想将读取属性的方法与属性自身分别放在不同的装配件中。

使用属性

在我们深入了解如何设计自定义属性之前,我们需要先看一下它们是如何使用的。例如,假定我们有一个称为“Hide”的属性它能够有效地隐藏Properties,因此它们不会显示在屏幕上。如果我们将这个属性应用于“SSN”property,那么代码将会如列表A所示。

列表 A

[Hide ()]

public string SSN

{

get { return _ssn; }

set { _ssn = value; }

}

作为更复杂一点的例子,假设我们将有一个属性称为“Alias”。该属性的任务是检查一个property可能拥有别名。这将允许将一个property值映射给另一个property即使批roperty的名字不匹配。这个属性接受一系列字符串值作为映射名。(列表B)

列表 B

[Alias ("FirstName", "First")]

public string FName

{

get { return _fName; }

set { _fName = value; }

}

在这个例子中,property“FName”被映射到“FirstName”和“First”,请查看示例应用以更详细的了解这种应用。

创建属性

创建属性是一个简单的过程。你可以定义继承自System.Attribute类的一个包含你想要储存的数据的类。列表C的前半部分显示了如何创建一个名为“Alias”的属性。

列表 C

Class Alias : System.Attribute

{

string[] _names;

public Alias(params string[] names)

{

this.Names = names;

}

public string[] Names

{

get { return _names; }

set { _names = value; }

}

}

正如你所看到的,这就是一个普通的类,唯一的例外就是继承自System.Attribute类。我们不需要作任何特别的事情使它成为一个类。我们只是简单的定义了一个需要使用的构造函数并创建了一个property和一个存储数据的私有成员。

列表D是个更简单的属性——“Hide”属性。这个属性不需要构造函数(使用默认的构建函数),也不储存数据。因为这个属性只是一个简单的标志类型的属性。

 

列表 D

Class Hide : System.Attribute

{

//This is a simple attribute, that only requires

// the default constructor.

}

从代码中读取属性

读取属性并检查其中的数据比使用属性或创建属性显著地更加复杂。读取属性要求开发人员要对如何使用一个对象的反射信息有个基本了解。如果你不熟悉反射机制,可以阅读“应用反射”系列文章。

假设我们正在查看一个类,我们想知道该类的那个properties使用了Alias属性以及都有哪些别名。列表E实现了这个功能。

列表 E

Private Dictionary<string, string> GetAliasListing(Type destinationType)

{

//Get all the properties that are in the

// destination type.

PropertyInfo[] destinationProperties = destinationType.GetProperties();

Dictionary<string, string> aliases = newDictionary<string, string>();

for each (PropertyInfo property in destinationProperties)

{

//Get the alias attributes.

object[] aliasAttributes =

property. GetCustomAttributes( typeof(Alias), true);

//Loop through the alias attributes and

// add them to the dictionary.

foreach (object attribute in aliasAttributes)

foreach (string name in ((Alias)attribute).Names)

aliases.Add(name, property.Name);

//We also need to add the property name

// as an alias.

aliases.Add(property.Name, property.Name);

}

return aliases;

}

这段代码最重要的地方是对GetCustomAttributes的调用以及循环遍历属性提取别名的地方。

GetCustomAttributes方法可以在我们从对象类型中提取的PropertyInfo类中找到。在上面的应用中,我们将要查询的属性类型作为参数传给GetCustomAttributes方法,同时还将“true”传递给该方法使得可以列出继承的属性。如何发现匹配的属性,GetCustomAttributes方法将返回一个对象数组。还有另外一种超负荷方法可以列出property上的所有属性,而不管属性类型是什么。

一旦有了属性,我们需要检查它们并从中提取需要的信息。这可以通过遍历由GetCustomAttributes方法得到的对象数组并将每个对象映射成我们要查询的属性来完成。在完成映射后,我们就可以像访问任意其它类的properties一样来访问属性的properties。

正如我在前面所说,读取属性是最困难的部分。然而,一旦我们写后读取属性的代码后,将来回忆和实施起来就相当容易了。

应用示例

我强烈建议你下载本文包含的这个应用示例。这个应用示例在一个简单的Windows应用中实现了下面的属性,并演示了如何读取和使用它们。

◆Alias——这同上面提到的Alias属性一样。当你需要将一种类型的对象翻译为另一种类型时,需要使用该属性。例如,如果你有一个Customer对象和一个Address对象,你可能需要将它们都翻译为一个合并的包含人名和地址的Person对象,当一个不能使用直接映射时,可以使用该属性。

◆DisplayName——示例代码中包括检查一个类实例并将它的property名称与值输出到屏幕上的代码。这个属性可用于覆盖送到屏幕显示的property名称。例如,一个名为“FName”property可以使用DisplayName属性,因此它显示为“First Name”。

◆Examine——这个属性使得示例应用中的PrintObject方法进入更深一层,并输出使用了Examine属性的property的值。例如,示例应用中的Customer对象将Examine属性应用到Address property。这将指示PrintObject方法输出address property中的所有信息。

◆Hide——这个属性指示PrintObject()方法不要将当前property输出到屏幕。该属性用在Customer对象的SSN property上。



示例应用中包含了实现和读取属性每一步的注释,仔细看一下,我敢保证你会发现一些在自己的应用中可以利用的功能。

相关推荐

C#中实现自定义属性

通过自定义属性,我们可以为代码添加更多的元数据,以便在需要时进行进一步的处理和分析。在C#编程中,我们可以使用自定义属性来为代码添加额外的元数据。自定义属性允许我们将信息附加到类型、成员或其他编程结构上,以满足特定的需求。通过继承该基类,我们可以创建自己的自定义属性类,并使用它们来装饰代码中的各种元素。下面,让我们通过一个示例来说明如何在C#中自定义属性,这里我们创建一个名为。的自定义属性类,并将其应用到一个类的字段上。最后,我们输出了获取到的自定义属性的描述信息。的测试类,并在其中的一个字段。

TechPr的博客 687

3.C#中通过反射来获取Attribute中的信息

  阅读目录   一:属性   二:自定义属性类BookAttribute实例   . 属性是由属性类来实现的,向上篇文章《C#温故而知新学习系列之.NET框架高级特性—.NET框架中自身提供的属性(二)》我们讲的Obsolete一样,我们还可以自定义属性类,属性类是由System.Attribute派生而来的   . 在C#中为了方便起见,使用自定义属性时可以省略属性名后面的Attrib...

weixin_33852020的博客 786

C#中动态加载PropertyGrid自定义属性的策略

NET框架中的PropertyGrid控件是一个功能强大的工具,它可以以属性表的形式展示对象的属性,并允许用户编辑这些属性。这种控件广泛应用于各种应用程序的开发过程中,特别是在需要动态显示和编辑对象属性的场景中。PropertyGrid控件的核心价值在于其高度的可定制性和灵活性。开发者可以根据需要,通过编程方式控制属性的显示、编辑以及验证等各个方面。例如,可以通过自定义属性描述符来改变属性的显示名称、类型转换器、编辑器等,从而提供更为丰富和友好的用户界面。

weixin_34268462的博客 1244

C#自定义属性

<br />1 .描述<br />属性提供功能强大的方法以将声明信息与 C# 代码(类型、方法、属性等)相关联。属性与程序实体关联后,即可在运行时使用名为“反射”的技术查询属性。 <br />属性以两种形式出现: <br />一种是在公共语言运行库 (CLR) 中定义的属性。<br />另一种是可以创建的用于向代码中添加附加信息的自定义属性。此信息可在以后以编程方式检索。<br />2. 示例代码: <br /> <br />using System;<br />using System.Collectio

aspnetSky的专栏 1482

C#自定义属性的创建与应用深度解析

本文深入探讨了C#中自定义属性的创建、使用和限制机制。通过属性(Attribute)的概念,介绍了如何定义和限制属性的使用范围,以及如何通过反射(Reflection)技术在运行时获取相关属性信息。文章通过代码示例清晰地展示了属性在类中的应用,包括如何定义属性类、如何将属性与类关联,以及如何通过反射访问这些属性。此外,本文还分析了AttributeUsage属性的使用,它允许我们限制自定义属性只能与特定的代码类型或目标相关联。

weixin_31419153的博客 510

自定义属性在C#中的应用与反射

本文深入探讨了C#中的自定义属性,包括属性的定义、使用、以及如何通过反射在运行时获取属性信息。首先介绍了属性的基本概念和参数使用,然后通过示例展示了如何创建和使用自定义属性,并讨论了属性的限制和定义方法。最后,文章通过代码示例展示了如何利用反射技术访问和展示类上关联的属性信息。

weixin_42360846的博客 486

反射中属性的用法

首先自定义属性继承 System.Attribute [AttributeUsage(AttributeTatget.All,AllowMultpie=true,Inherited=false)] //关于自定义属性的约束 作用范围/可否多次设置/可否继承 public class myAttribute:Attribute {     //可以有属性,方法以及构造函数 } /

炘的专栏 403

从气象预报到物流规划:多尺度地理加权回归(MGWR)在ArcGIS Pro中的实战应用

本文深入探讨了多尺度地理加权回归(MGWR)在ArcGIS Pro中的实战应用。通过对比传统GWR模型,MGWR的核心优势在于能识别不同解释变量的独特空间作用尺度,有效解决空间异质性问题。文章结合气象预报误差修正与物流网点选址两个案例,详细讲解了从数据准备、参数设置、带宽优化到结果解读的全流程,为地理数据分析师处理复杂空间数据提供了强大工具。

egg99的博客 1034

C#中的自定义控件中的属性、事件及一些相关特性的总结

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33775582的博客 235

Win11下WSL2安装Ubuntu22.04避坑指南:从镜像源到C++环境配置

本文提供了一份详细的Win11下WSL2安装Ubuntu22.04的实战避坑指南。内容涵盖从WSL2核心安装、自定义安装路径,到更换国内镜像源以解决更新缓慢问题,并一站式配置完整的C++开发环境(包括GCC、CMake、vcpkg等),最后分享提升开发体验的进阶技巧,助你在Windows上打造高效的Linux开发工作站。

weixin_29260291的博客 562

Error: dependent ‘..\..\..\..\Qt\5.15.2\msvc2019\include\QtWidgets\QMainWindow‘ does not exist.

核心问题:修改 Build 目录为源码子目录后,MSVC 编译报错,本质是变量设置异常,导致 qmake 生成多余回溯路径;临时解决:在 .pro 文件添加;最优解决:将上述配置写入 Qt 的 msvc 对应 qmake.conf 全局文件,一劳永逸;禁止 qmake 计算路径时向上回溯,避免生成异常路径。

mumufan05的专栏 878

[C#]C#中的自定义属性

   作者:Mikel 日期:2008-07-25原著:Sadaf Alvi翻译:Abbey 原文出处 Attributes in C#, CodeProject摘要  在这篇指南里,我们将会看到如何自己创建属性(Attribute),并将其用到不同的程序实体(Entity)上,在程序运行时获取属性信息。译注  MSDN将 Attribute 与 P

taonylu的专栏 6755

OpenPnP/Arduino - 二手西门子电动飞达的通讯协议解析与实战

本文详细解析了二手西门子电动飞达的通讯协议,并通过Arduino控制板实现与开源贴片平台OpenPnP的集成。文章涵盖了硬件接口定义、协议帧结构分析、Arduino控制实战、OpenPnP集成技巧以及二手飞达翻新指南,为开发者提供了全面的技术指导和实战经验。

weixin_30411819的博客 202

C# 自定义属性

在.NET框架中,经常用到属性,从定义哪些类是可序列化到选择某个Web服务应用中的哪些方法是可以公开的都会用到属性。使用属性可以在设计时对类、properties和方法添加说明,然后在运行时通过反射信息来检查它们。本文为我们介绍了在开发应用时如何利用C#自定义属性。本文可以从技术文章下载出获得,其中包含了一个使用定制属性的Visual Studio项目示例文件。     属性类是设计时可应

白云的专栏 5227

Nginx配置Cookie安全属性:HttpOnly、Secure、SameSite实战指南

Cookie是Web应用中维持用户状态的核心机制,其安全配置直接关系到会话管理与身份认证的可靠性。从原理上讲,HttpOnly属性可防止XSS攻击窃取Cookie,Secure属性确保Cookie仅在HTTPS加密连接中传输,而SameSite属性则用于控制跨站请求时Cookie的发送行为,能有效防御CSRF攻击。这些安全属性的技术价值在于构建纵深防御体系,提升应用的整体安全性。在现代浏览器(如Chrome 80+)默认将未明确声明的Cookie视为SameSite=Lax的背景下,正确配置这些属性变得尤为

weixin_33783283的博客 323

基于STFT和卷积神经网络的时序数据分类

我们提供了相应的代码和数据,读者可以直接运行并尝试在自己的数据集上进行分类实验。在本文中,我们将介绍一种基于短时傅里叶变换(STFT)和卷积神经网络(CNN)的时序数据分类方法。我们将提供可直接运行的代码和数据,以帮助读者理解和实现这一方法。STFT可以提取信号的频谱信息,有助于捕捉时序数据中的关键特征。在这个例子中,我们将使用一个简化的手势识别数据集作为示例。在这段代码中,我们使用Adam优化器和稀疏分类交叉熵损失函数进行模型的编译。然后,我们使用训练集进行模型的训练,同时使用测试集进行模型性能的验证。

CodeWOW的博客 694

如何利用C#自定义属性

在.NET框架中,经常用到属性,从定义哪些类是可序列化到选择某个Web服务应用中的哪些方法是可以公开的都会用到属性。使用属性可以在设计时对类、properties和方法添加说明,然后在运行时通过反射信息来检查它们。本文为我们介绍了在开发应用时如何利用C#自定义属性。本文可以从技术文章下载出获得,其中包含了一个使用定制属性的Visual Studio项目示例文件。    属性类是设计时可应用

pollop的专栏 770

基于YOLOv8和时序模型的异常动作检测系统

异常动作检测是计算机视觉领域的重要应用,广泛应用于智能监控、安防系统、老人看护等场景。本项目结合YOLOv8目标检测和LSTM时序模型,实现对打架、摔倒、奔跑等异常动作的实时检测,并提供了完整的Web界面。多技术融合: 结合YOLOv8目标检测和LSTM时序建模实时检测: 支持实时视频流处理和文件分析用户友好: 提供完整的Web界面可扩展性: 模块化设计便于功能扩展高性能: 包含多种优化策略。

YOLO 764

C# Winforms 自定义控件 自定义属性 以及自定义事件

C# Winforms 自定义控件 自定义属性 以及自定义事件第一步 项目部分第二步 代码部分自定义属性定义普通属性定义结合事件的属性自定义事件第三步 生成和配置部分第四步 效果展示 第一步 项目部分 新建项目 选择窗体控件库 点击确定 这个空白区域就是一个新建的控件 其实现在已经基本完成了 自定义控件的创建(可以直接跳到生成和配置部分生成控件了) 因为基本的属性和事件(例如click事件 backcolor属性等几乎每一个控件都需要有的属性和事件)系统已经帮你配置好了 代码部分只是 为了增加 自己自定义

小何程序员的博客 7742

5G/NR SSB学习总结

6.1 SSB概念 同步信号和PBCH块(Synchronization Signal and PBCH block, 简称SSB),它由主同步信号(Primary Synchronization Signals, 简称PSS)、辅同步信号(Secondary Synchronization Signals, 简称SSS)、PBCH三部分共同组成。 6.2 SSB特征 ...

欢迎来到小七的博客,这里将带你深入探索5G通信的神秘世界。无论你是通信领域的专业人士还是对这一领域充满好奇心的技术爱好者,这里都有专业协议解读、通信知识普及以及有趣的Python编程内容等你发现。 8万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

总结一下 C# 如何自定义特性 Attribute 并进行应用

Attribute(特性)是一种用于为程序元素(如类、方法、属性等)提供元数据信息的方法,描述其用途、状态、约束等,可以在运行时通过反射获取并读取,用于实现一些动态的行为,如配置加载、权限检查等,应用范围非常广泛,在实际开发中经常用于标记和控制程序的行为,提高代码的可读性和灵活性

yangshuquan的专栏 2091

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

如何使用C#自定义属性

在.NET框架中,经常用到属性,从定义哪些类是可序列化到选择某个Web服务应用中的哪些方法是可以公开的都会用到属性。使用属性可以在设计时对类、properties和方法添加说明,然后在运行时通过反射信息来检查它们。本文为我们介绍了在开发应用时如何利用C#自定义属性。本文可以从技术文章下载出获得,其中包含了一个使用定制属性的Visual Studio项目示例文件。属性类是设计时可应用于类、p

月黑杀人夜,风高放火时! 1466

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

CATIA二次开发:C方式获取产品属性——一般属性及自定义属性

CATIA二次开发:C#方式获取产品属性——一般属性及自定义属性 【下载地址】CATIA二次开发C方式获取产品属性一般属性及自定义属性 此开源项目专注于CATIA二次开发,通过C#语言实现产品属性的获取与设置,涵盖一般属性和自定义属性的操作。内容详实,步骤清晰,适合有一定C#基础的开发者深入学习。项目从基础理论入手,介绍...

gitblog_06788的博客 937
上一篇: 定制属性
下一篇: 字符串格式化
mydriverc
博客等级 码龄21年 160粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值