标记界面的目的是什么?标记界面的目的是什么?
3 回答
元芳怎么了
TA贡献1798条经验 获得超7个赞
标记接口用于将类的功能标记为在运行时实现特定接口。
在界面设计和.NET类型设计准则-界面设计劝阻赞成使用C#属性的使用的标记接口,但作为@Jay Bazuzi指出,更容易检查比属性标记的接口:o is I
所以不是这样的:
public interface IFooAssignable {} public class FooAssignableAttribute : IFooAssignable { ...}
.NET指南建议您这样做:
public class FooAssignableAttribute : Attribute { ...}[FooAssignable]public class Foo { ...}
慕后森
TA贡献1802条经验 获得超5个赞
由于每个其他答案都说“应该避免它们”,因此解释原因会很有用。
首先,为什么使用标记接口:它们的存在是为了允许使用实现它的对象的代码检查它们是否实现了所述接口,如果有,则以不同的方式处理对象。
这种方法的问题在于它破坏了封装。对象本身现在可以间接控制外部使用方式。此外,它了解将要使用的系统。通过应用标记接口,类定义表明它希望用于检查标记存在的某个地方。它隐含地了解它所使用的环境,并试图定义它应该如何被使用。这违背了封装的想法,因为它了解完全在其自身范围之外存在的系统的一部分的实现。
在实际水平上,这降低了可移植性和可重用性。如果在不同的应用程序中重用该类,则需要同时复制该接口,并且在新环境中它可能没有任何意义,使其完全冗余。
因此,“标记”是关于类的元数据。这个元数据不是由类本身使用,只对(某些!)外部客户端代码有意义,因此它可以以某种方式处理对象。因为它只对客户端代码有意义,所以元数据应该在客户端代码中,而不是类API。
一个“标记接口”和普通接口之间的区别是,方法的接口告诉外面的世界怎么可以使用,而空的接口意味着它告诉外面的世界如何应该被使用。
- 3 回答
- 0 关注
- 757 浏览
添加回答
举报
0/150
提交
取消