Java 注释和 C# 属性之间有什么相似之处和不同之处?
2022-08-31 20:37:58
我有一个Java库,我正在考虑移植到C#。Java库广泛使用注释(在构建时和运行时)。
我从未使用过C#属性,但我知道它们大致相当于Java注释。
如果我使用属性继续使用端口来替换注释,我需要知道什么?什么会是一样的?不同?什么会咬我?
我有一个Java库,我正在考虑移植到C#。Java库广泛使用注释(在构建时和运行时)。
我从未使用过C#属性,但我知道它们大致相当于Java注释。
如果我使用属性继续使用端口来替换注释,我需要知道什么?什么会是一样的?不同?什么会咬我?
在两种语言之间,对元数据何时可访问的控制是不同的。
Java 提供 java.lang.annotation.Retention annotation 和 java.lang.annotation.RetentionPolicy enum 来控制何时可以访问注释元数据。选择范围从(最常见的 - 保留在类文件中的注释元数据)到(编译器丢弃的元数据)。您可以使用以下命令标记自定义注释界面 - 例如:Runtime
Source
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.CLASS)
public @interface TraceLogging {
// etc
}
将允许您在运行时反思您的自定义注释。TraceLogging
C# 使用从编译时符号驱动的 ConditionalAttribute 属性。因此,C# 中的类似示例是:
[Conditional("TRACE")]
public class TraceLoggingAttribute : Attribute
{
// etc
}
这将导致编译器仅在定义了符号时才吐出自定义属性的元数据。TraceLogging
TRACE
铌。默认情况下,属性元数据在 C# 中运行时可用 - 仅当要更改它时才需要这样做。
Java注释的一个重要方面,我还没有详细研究过:你可以编写代码,使用javac中的注释(我相信从Java 6开始)作为元编程的一种形式。
诚然,PostSharp允许类似的东西。
(这远非唯一的区别,但这是我现在有时间的。