当前位置:
首页 > temp > 简明python教程 >
-
C#特性
C# 程序中的类型、成员和其他实体支持使用修饰符来控制其行为的某些方面。 例如,方法的可访问性是由 public
、protected
、internal
和 private
修饰符控制。 C# 整合了这种能力,以便可以将用户定义类型的声明性信息附加到程序实体,并在运行时检索此类信息。 程序通过定义和使用特性来指定此类额外的声明性信息。
以下示例声明了 HelpAttribute
特性,可将其附加到程序实体,以提供指向关联文档的链接。
public class HelpAttribute : Attribute { string url; string topic; public HelpAttribute(string url) { this.url = url; } public string Url => url; public string Topic { get { return topic; } set { topic = value; } } }
所有特性类都派生自标准库提供的 Attribute 基类。 特性的应用方式为,在相关声明前的方括号内指定特性的名称以及任意自变量。 如果特性的名称以 Attribute
结尾,那么可以在引用特性时省略这部分名称。 例如,可按如下方法使用 HelpAttribute
。
[Help("https://www.cnblogs.com/taotaozhuanyong/")] public class Widget { [Help("https://www.cnblogs.com/taotaozhuanyong/", Topic = "Display")] public void Display(string text) { } }
此示例将 HelpAttribute
附加到 Widget
类。 还向此类中的 Display
方法附加了另一个 HelpAttribute
。 特性类的公共构造函数控制了将特性附加到程序实体时必须提供的信息。 可以通过引用特性类的公共读写属性(如上面示例对 Topic
属性的引用),提供其他信息。
可以在运行时使用反射来读取和操纵特性定义的元数据。 如果使用这种方法请求获取特定特性,便会调用特性类的构造函数(在程序源中提供信息),并返回生成的特性实例。 如果是通过属性提供其他信息,那么在特性实例返回前,这些属性会设置为给定值。
下面的代码示例展示了如何获取与 Widget
类及其 Display
方法相关联的 HelpAttribute
实例。
Type widgetType = typeof(Widget); //获取为小部件类型定义的每个helpattribute。 var widgetClassAttributes = widgetType.GetCustomAttributes(typeof(HelpAttribute), false); if (widgetClassAttributes.Length > 0) { var attr = (HelpAttribute)widgetClassAttributes[0]; Console.WriteLine($"Widget class help URL:{attr.Url}-Related topic :{attr.Topic}"); } MethodInfo displayMethod = widgetType.GetMethod(nameof(Widget.Display)); //获取为widget.display方法定义的每个helpattribute。 var displayMethodAttributes = displayMethod.GetCustomAttributes(typeof(HelpAttribute), false); if (displayMethodAttributes.Length > 0) { var attr = (HelpAttribute)displayMethodAttributes[0]; Console.WriteLine($"Display method help URL : {attr.Url} - Related topic : {attr.Topic}"); } Console.ReadLine();
运行结果如下:
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数