比较C#的属性和Java的标记接口

时间:2014-05-21 11:05:24

标签: java c# interface attributes

昨天我在C#中遇到了属性,准确地说[Serializable]。据我了解,它们像元数据一样用于提供有关您班级的一些信息。

另外,我了解到Java有"标记接口" ,没有方法的接口,用于解释类,即标记类的某些特征,例如Serializable接口。

我想知道:你能在两者之间做出平行吗?它们是相似的,甚至是相同的?

2 个答案:

答案 0 :(得分:2)

C#属性更像是Java注释。 (我相信Java有这个想法。)

标记接口是Java 1.0构造,在新代码中很少使用,如果有的话。我发现它们没用。我不建议恢复这种做法。

Java接口应该用于分离方法签名的声明("什么")与实现("如何")。它们应该像C ++纯虚拟类,而不是属性或注释。

答案 1 :(得分:2)

几年前,Java不支持属性。因此,要“标记”类或接口以便这样做 他们可以在运行时检查,你会使用标记接口, 这基本上是一个空接口,但您仍然可以检查是否可以将实例转换为此接口。

In .NET,除了特殊用例(例如允许使用扩展方法)之外,不应使用标记接口,  因为属性提供了一种更好的方法来使用元信息标记类(以及更多)。 Java 5及更高版本也是如此,  引入注释的地方,应该使用注释。

Marker interfaces:

1)使用动态类型检查更容易检查('obj is IMarker');

2)将来允许功能和数据可扩展性(即将“标记”接口转换为实际声明某些成员的“完整”接口);

3)可用于泛型类型约束;

Attributes:

提供更清晰的元数据分离;

允许通过其构造函数或属性指定其他信息;

允许对实体进行多次申请;

是适用于不同类型实体的通用目的,而不仅仅是类;

在很大程度上取决于特定应用程序的体系结构和设计是否适合在特定情况下使用标记接口或属性。