比较c# '属性和Java'标记接口

本文关键字:接口 Java 属性 比较 | 更新日期: 2023-09-27 18:04:19

昨天我在c#中遇到了属性,确切地说是[Serializable]。在我看来,它们就像元数据一样,用来提供关于你的类的一些信息。

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

我在想:你能把这两者相提并论吗?它们是相似的,还是相同的?

比较c# '属性和Java'标记接口

c#属性更像Java注释。(我相信这就是Java的灵感来源。)

标记接口是Java 1.0结构,很少在新代码中使用。我觉得它们没什么用。我不建议恢复这种做法。

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

几年前,Java不支持属性。因此,要"标记"一个类或接口,以便它们可以在运行时检查,你可以使用标记接口,这基本上是一个空接口,但你仍然可以检查一个实例是否可以被强制转换到这个接口。

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

Marker interfaces:

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

2)允许将来的功能和数据可扩展性(即将"标记"接口变成实际声明一些成员的"完整"接口);

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

Attributes:

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

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

允许多个应用程序到一个实体;

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

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