接口访问修饰符困境

Naj*_*eeb 3 c# abstract-class interface access-modifiers

在我的C#程序中,我有几个我自己的接口,我想保持我的程序集内部.

internal interface Doable {
    void DoSomething ();
}

internal interface Informable {
    void SomethingHappened (Doable obj);
}
Run Code Online (Sandbox Code Playgroud)

我有一个抽象类,它不能是内部的,它抽象地实现了两个接口,就像这样.

public abstract class MyAbstractClass : Doable, Informable {
    internal abstract void DoSomething ();
    internal abstract void SomethingHappened (Doable obj);

    // Other methods
}
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我得到一个MyAbstractClass没有实现的错误Doable.DoSomething()(以及SomethingHappened(Doable obj)同样).

我可以将抽象实现的访问修饰符更改DoSomething()为public(然而,我首先不想这样做),但后来SomethingHappened(Doable obj)是另一回事:它抱怨(正确地说)接口Doable是内部的(因此这是方法可能没有public访问修饰符).

我处于两难境地.我基本上希望将两个接口及其所有具体实现的方法保持在内部程序集中的所有类中,外部调用者不知道它们的存在.

想知道怎么回事?

Ser*_*rvy 5

而不是使接口实现抽象,提供一个具体(显式接口)实现,调用实际完成工作的内部抽象方法.这确保了界面不能公开调用; 它只能从当前的程序集中访问.