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

时间:2010-02-17 18:41:03

标签: c# inheritance interface

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

提前致谢!

3 个答案:

答案 0 :(得分:25)

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

你为什么要这样做?请记住,通过声明接口继承:

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

您指定实施InterfaceB的任何内容也必须实施InterfaceA,因此无论如何您都会获得实施InterfaceA的课程。

答案 1 :(得分:1)

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

我可以看到两种有缺陷的方式,有点像。

  1. 制作实现IAnimation的动画和非动画抽象类。它们下面的具体类仍然可以用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
        }
    }
    
  3. 再次,有点黑客。但是你要做的事情无论如何都表明了设计缺陷。

答案 2 :(得分:-1)

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