写点什么

C# 8 新提案让泛型 Attribute 成为现实

  • 2019-01-28
  • 本文字数:955 字

    阅读完需:约 3 分钟

C# 8新提案让泛型Attribute成为现实

从一开始, Attribute 就是.NET 的一部分。因此,它们在引入泛型之前就已经被创建好,这意味着如果要引用属性中的类型,必须暴露一个 Type 参数或属性。例如:


[TypeConverter(typeof(X))]
复制代码


这种模式存在一些限制。在上面的示例中,X 必须有一个无参数的构造函数,并继承 TypeConverter。编译器不会强制这些,所以开发人员只能在运行时发现错误。


相反,如果我们使用泛型类型参数,那么就可以在编译器强制执行这些规则,而且语法会稍微清晰一些。


[TypeConverter<X>]
复制代码


理论上,“Allow Generic Attributes”提案是一个非常简单的变更。CLR 已经支持这个概念,问题是如何在.NET 语言中使用它。但有时候理论和现实是两条平行线,而且即使 CLR 可以支持,并不代表就一定会支持。Jan Kotas 解释说:


我认为这个问题的本质与局部引用和 return 类似。局部引用和 return 不受任何 API 的限制,理论上它们在现有的运行时、工具和库上都能正常运行。但在实际当中,它们可能不能正常运行,因为它们暴露了预先存在的错误和限制,可能是因为它们的处理路径从未被执行过,或者它们明显不在预期之内。与引用 return 相关的错误和问题刚刚开始出现,因为人们开始使用这项功能,并发现了一些不奏效的地方。我认为这在预期之内。我们应该承认这些事实,并且不会采取之前我们撤回默认值类型构造函数功能那样的行动。

这个功能非常类似。ECMA 并没有针对禁止使用泛型 Attribute 的内容,在理论上应该可以正常运行,但实际上却没有。如果要正常运行,必须更新整个系统中的很多部件:

  1. 存在多个运行时(Mono、CoreRT、整个框架);

  2. IL 的一些工具也可能会受到影响(编译器、基于 Cecil 或基于 CCI2 的工具);

  3. 可能需要用于访问泛型 Attribute 的 API(例如,现有的反射 API 不允许你访问泛型 Attribute——你必须进行枚举)。


该提案的一个限制是在编译时必须“关闭”Attribute 功能。下面是提案中提供的一个启用泛型 Attribute 的例子。


[SomeAttribute<T>]public void DoSomething<T>(T input) { }
复制代码


因为 T 不是在编译时定义的,因此反射机制就不知道这个表达式会返回什么。


typeof(GenericClass<>).GetMethod("DoSomething").GetCustomAttributes()
复制代码


状态


目前,泛型 Attribute 功能列在C# 8路线图中,状态为“进行中”。


查看英文原文https://www.infoq.com/news/2019/01/Generic-Attributes


2019-01-28 10:075372
用户头像

发布了 731 篇内容, 共 467.0 次阅读, 收获喜欢 2006 次。

关注

评论

发布
暂无评论
发现更多内容

实现静态资源访问的几种方法

疯狂紫萧

前端 CDN

如何优雅地处理RabbitMQ中的消息丢失

互联网工科生

RabbitMQ 消息系统 消息不丢失

预设成功

FunTester

质量指标如何发挥作用?构建质量能力是关键

BY林子

质量指标 质量度量 质量能力

LED显示屏只显示一半怎么办

Dylan

硬件 显示器 LED显示屏

MES系统在机器人行业生产管理种的运用

万界星空科技

人工智能 机器人 MES系统 机器人自动化

袋鼠云数栈 DataOps 数据生产力实践,实现数据流程的自动化和规范化

袋鼠云数栈

DataOps

软件开发项目文档清单(多套实际案例)

金陵老街

基于昇腾,安擎又双叒叕推新品!

科技热闻

GPT-4助力数据分析:提升效率与洞察力的未来关键技术 | 京东云技术团队

京东科技开发者

数据分析 ChatGPT4 企业号 8 月 PK 榜

大模型AI人才培养研习会,上海、武汉站同期招募!

飞桨PaddlePaddle

人工智能 百度飞桨 文心大模型

bi数据分析系统:从数据中发现商机

巷子

构建以人为本的全面预算管理模式

智达方通

全面预算管理 以人为本

快手出席中国多媒体大会:产学研合作共赢,迎接AGI时代新机遇

Geek老T

多媒体 AGI 智能媒体生产

让数据说话,瓴羊Quick BI报表工具助企业洞察市场趋势

流量猫猫头

数据分析看板助力企业实现数据价值最大化

夏日星河

好玩有趣的HTML标签

专注前端开发

html

商品推荐系统浅析 | 京东云技术团队

京东科技开发者

算法 推荐系统 推荐算法 企业号 8 月 PK 榜 搜索推荐系统

11. 数据类型 - 字典

茶桁

Python 数据类型 字典

12. 数据类型 - 集合详解

茶桁

Python 集合 数据类型

头像生成App 欢迎试用 | AIGC

AIWeker

人工智能 AIGC Stable Diffusion

山东布谷网络科技详解直播打赏源码,让功能更灵活

山东布谷网络科技

App 直播源码

【智领信创】用友 U8 cloud &亚信科技 AntDB联合产品强势来袭,0元购活动惠及陕、鲁

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 8 月 PK 榜

HA3 SQL样本实验:一种混合计算查询的全新样本解决方案

阿里技术

2023年-广州国际睡眠家居产品及睡眠展会

秋硕展览

C# 8新提案让泛型Attribute成为现实_语言 & 开发_Jonathan Allen_InfoQ精选文章