我想只在其他接口中实现某些接口,我不希望它们能够被类直接继承。
提前致谢!
答案 0 :(得分:25)
你不能在C#中做到这一点 - 任何类都可以实现它有权访问的任何接口。
你为什么要这样做?请记住,通过声明接口继承:
public interface InterfaceA {}
public interface InterfaceB : InterfaceA {}
您指定实施InterfaceB
的任何内容也必须实施InterfaceA
,因此无论如何您都会获得实施InterfaceA
的课程。
答案 1 :(得分:1)
首先,说“在其他接口中实现”是没有意义的,因为接口无法实现任何东西。
我可以看到两种有缺陷的方式,有点像。
制作实现IAnimation的动画和非动画抽象类。它们下面的具体类仍然可以用new运算符强制覆盖你的IAnimation方法:
class SomeAnim : Animated
{
public new void Foo() { }
}
使用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
}
}
再次,有点黑客。但是你要做的事情无论如何都表明了设计缺陷。
答案 2 :(得分:-1)
我能建议的最好的方法是将它们 - 顶层和下层接口放在一个单独的程序集中,基层级接口声明为internal
,接口将这些接口扩展为public
。