C# 的属性比 Java 的注释设计得更好吗?

soc*_*soc 2 c# java attributes annotations language-design

在阅读了 Clinton Begin(iBatis 的创建者)的这篇旧文章后,我真的想知道他关于注释与属性的主张是否被广泛接受,或者是否存在分歧。

他的观点是:

  • 注释不可扩展
  • 不支持位置参数
  • 与 Java 不同的定义语法
  • annotation不是关键字(与 不同enum

这些说法有道理吗?C# 如何对此进行改进?

Bli*_*ndy 5

仔细考虑一下这些观点显然有其优点:

  • 属性是您可以根据需要扩展和查询的类。您甚至可以添加自己的!
  • 位置参数(我猜你指的是命名参数)确实可以在 C# 中实现,并且具有完整的 Intellisense 支持。
  • 无法真正评论它看起来有多奇怪,尽管它来自 Razor,但它让我想到了宏扩展。
  • 属性也没有关键字,它们只是一个普通的类。

这并不会让 Java 的实现变得更糟,因为他们有不同的目标:向后兼容性。C# 的优点是从头开始构建语言(然后向前发展,而不是保持严格的向后兼容性)。

不过,作为一个挑剔的人,你或我提到的所有内容都不是 C# 的一部分,它们是 .NET 运行时的一部分,并且在 VB.NET 和 F# 中同样可以找到。