C#接口 – 仅在其他接口中实现接口

我想只在其他接口中实现某些接口,我不希望它们能够被类直接inheritance。

提前致谢!

你不能在C#中做到这一点 – 任何类都可以实现它有权访问的任何接口。

你为什么想做这个? 请记住,通过声明接口inheritance:

public interface InterfaceA {} public interface InterfaceB : InterfaceA {} 

您指定实现InterfaceB任何内容也必须实现InterfaceA ,因此您将获得实现InterfaceA类。

首先,说“在其他接口中实现”是没有意义的,因为接口不能实现任何东西。

我可以看到这样做的两种有缺陷的方式。

  1. 制作实现IAnimation的Animated和NonAnimated抽象类。 它们下面的具体类仍然可以用new运算符强制覆盖你的IAnimation方法:

     class SomeAnim : Animated { public new void Foo() { } } 
  2. 使用mixins。 将IAnimated和INonAnimated保持为接口,但不要在接口中放置任何方法。 而是定义像这样的扩展方法:

     static class Ext { public static void Foo(this IAnim anim) { if (anim is IAnimated) // do something else if (anim is INonAnimated) // do something else } } 

再次,有点黑客。 但是你要做的事情表明设计缺陷无论如何。

我能建议的最好的方法是将它们 – 顶层和下层接口放在一个单独的程序集中,基层级接口声明为internal ,接口将这些接口扩展为public