none
没有任何方法定义的接口有什么用 RRS feed

  • 问题

  • 有些.net自定义的接口没有任何方法,所以继承它以后不需要实现接口方法,但是不继承它又有一些功能无法使用,为什么要定义这些接口呢?

    最近在看Orchard源码,里面也有一些这样的接口,比如:

    public interface IDependency {}

     public interface ISingletonDependency : IDependency {}

    不理解这样设计的用意何在?

    2012年2月3日 12:42

答案

  • 你好,这篇文章的讨论有不同的看法 http://stackoverflow.com/questions/3310936/interface-without-any-methods-bad-practice

    在我个人认为,这种做法不是很好,如果仅仅要标记一个类的时候,可以使用Attribute,而非marker interface。

    不过偶尔我也会用到,比如我在定义一个接口,我计划在今后版本会添加一些方法,但是我当前的版本不需要;在今后版本,我直接修改这个接口增加方法,那么在编译的时候,那些实现这些接口的类就会报错,我就会去做相应的修改,这样就不用一个个文件去查找那些类需要实现这个方法。不过建议尽量避免使用空接口


    Raymond Tang (Microsoft C# MVP)
    Denn Ich Gehoer nur mir
    微软中文论坛同城社区成都QQ群:74268428
    My Blog http://kosmisch.net
    Chengdu,China
    2012年2月3日 13:45
    版主

全部回复

  • 你好,这篇文章的讨论有不同的看法 http://stackoverflow.com/questions/3310936/interface-without-any-methods-bad-practice

    在我个人认为,这种做法不是很好,如果仅仅要标记一个类的时候,可以使用Attribute,而非marker interface。

    不过偶尔我也会用到,比如我在定义一个接口,我计划在今后版本会添加一些方法,但是我当前的版本不需要;在今后版本,我直接修改这个接口增加方法,那么在编译的时候,那些实现这些接口的类就会报错,我就会去做相应的修改,这样就不用一个个文件去查找那些类需要实现这个方法。不过建议尽量避免使用空接口


    Raymond Tang (Microsoft C# MVP)
    Denn Ich Gehoer nur mir
    微软中文论坛同城社区成都QQ群:74268428
    My Blog http://kosmisch.net
    Chengdu,China
    2012年2月3日 13:45
    版主
  • 谢谢你的回复,有可能是设计师与我所看到的抽象层次不同吧,所以我不太理解作者这样设计的原因。这样做可能是让程序更有层次感或者更有效的管理分类吧。看来不能光看源码,还得从更高的层次上来看设计...
    2012年2月3日 15:06
  • dear

    接口的用意就像是一种规范,

    http://social.msdn.microsoft.com/Forums/zh-TW/user/threads?user=%E4%BD%99%E5%B0%8F%E7%AB%A0


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2012年2月3日 16:27