界面访问修饰符困境
作者:互联网
在我的C#程序中,我有几个自己的接口,希望将它们保留在程序集内部.
internal interface Doable {
void DoSomething ();
}
internal interface Informable {
void SomethingHappened (Doable obj);
}
而且我还有一个抽象类,它不能是内部的,并且像这样抽象地实现了两个接口.
public abstract class MyAbstractClass : Doable, Informable {
internal abstract void DoSomething ();
internal abstract void SomethingHappened (Doable obj);
// Other methods
}
但是,当我这样做时,我得到一个错误,即MyAbstractClass没有实现Doable.DoSomething()(以及SomethingHappened(Doable obj)).
我可以将抽象实现的DoSomething()的访问修饰符更改为public(但是我本来不想这么做),但是SomethingHappened(Doable obj)是另一回事:它抱怨(正确地是)接口Doable是内部的(因此此方法可能没有公共访问修饰符).
我处于两难境地.我基本上想在内部所有程序集中所有接口中所有接口及其所有具体实现的方法,而外部调用者不知道它们的存在.
想知道如何去做吗?
解决方法:
而不是使接口实现抽象化,而是提供一种具体的(显式接口)实现,该实现调用实际完成工作的内部抽象方法.这确保了该接口不能被公共调用.它只能从当前程序集中访问.
标签:interface,abstract-class,access-modifiers,c 来源: https://codeday.me/bug/20191025/1928760.html