什么是用于的空接口

ter*_*tyl 36 interface

我正在看nServiceBus并通过这个界面

namespace NServiceBus
{
    public interface IMessage
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

空接口有什么用?

Men*_*elt 36

通常它是用来表示一个类的用法.您可以实现IMessage来表示您的类是消息.然后,其他代码可以使用反射来查看您的对象是否要用作消息并相应地执行操作.

这是Java在注释之前经常使用的东西.在.Net中,使用属性更清晰.


@ Stimpy77谢谢!我没想过那样.我希望你允许我以更一般的方式改写你的评论.

必须在运行时使用反射检查注释和属性.可以使用编译器中的类型系统在编译时检查空接口.这根本不会在运行时产生任何开销,因此速度更快.

  • 要注意.NET注释,它需要反射才能使用属性,这种属性较慢并且不支持"X是Y"和"X as Y"语义.您也可以在.NET中使用空接口. (9认同)

And*_*dré 10

在java中Serializable就是一个完美的例子.它没有定义任何方法,但每个"实现"它的类必须确保它是可序列化的,并且不能引用无法序列化的东西,如数据库连接,打开文件等.

  • 如果可序列化为空...这是如何强制执行的? (2认同)

Jon*_*eet 8

在Java中,空接口通常用于"标记"类 - 这些天通常会使用注释.

这只是向类中添加一些元数据的<this>一种方式,即即使不涉及普通成员,"此类也适合使用".

  • 嗯,听起来要么是对这个概念的误用,要么是一个聪明的想法。可能两者都有;-)。 (2认同)
  • 在没有注释之前,还是有一定道理的。现在没有充分的理由使用它,IMO。 (2认同)