在我的C#程序中,我有几个自己的接口,我希望保持这些接口只在我的程序集内部可见。
internal interface Doable {
void DoSomething ();
}
internal interface Informable {
void SomethingHappened (Doable obj);
}
我还有一个抽象类,不能是internal,它抽象地实现了这两个接口,代码如下。
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
是内部的(因此该方法可能没有public
访问修饰符)。我陷入了困境。我基本上想保留整个程序集中所有类的两个接口及其所有具体实现方法,对外部调用者不知道它们的存在。
想知道如何解决?
internal abstract
成员的public class
是一种代码异味。@Servy的答案很好,另一个方法是公开public MyPublicAbstractClass
,它包装(而不是继承!)一些internal MyInternalAbstractClass
。 - Sinatrinternal
的东西(你通过使用接口来实现)?为什么调用者需要知道这些呢?看看框架,我不记得有一个类实现了像这样的隐藏接口,因为设计始于创建公共接口。而你却试图创建包含隐藏内容的公共类。为什么?因为一些隐藏方法正在使用公共类的隐藏接口方法吗?所以你试图让那个类扮演两个角色=代码异味。你能给我们展示具体的代码吗?如果你是对的,那么辩论和辩护会更容易。 - Sinatr