c# - 接口(interface)访问修饰符困境

标签 c# interface abstract-class access-modifiers

在我的 C# 程序中,我有几个自己的接口(interface),我想将它们保留在我的程序集中。

internal interface Doable {
    void DoSomething ();
}

internal interface Informable {
    void SomethingHappened (Doable obj);
}

我还有一个不能是内部的抽象类,它抽象地实现了这两个接口(interface)。

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 ) 是另一回事:它提示(正确地)接口(interface) Doable 是内部的(因此此方法可能没有 public 访问修饰符)。

我进退两难了。我基本上想在程序集内部的所有类中保留这两个接口(interface)及其所有具体实现的方法,而外部调用者不知道它们的存在。

想知道该怎么做吗?

最佳答案

与其将接口(interface)实现抽象化,不如提供一个具体(显式接口(interface))实现来调用实际执行工作的内部抽象方法。这确保了接口(interface)不可公开调用;它只能从当前程序集访问。

关于c# - 接口(interface)访问修饰符困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48079363/

相关文章:

c# - asp.net如何对GridView中的数据进行排序

c# - 即使指定了 "return",方法中的验证也会继续运行其余代码

java - 是否有保证 void main(String[] args) 的标准接口(interface)?

java - 如何通过继承抽象类的类从 main 调用抽象类的静态变量访问器?

c# - 从 Nullable 类型反射获取 PropertyType.Name

c# - 将 get;set 字符串 DateEntered 从 yyyy-MM-dd 转换为 C# 中的 MM-dd-yyyy?

Java接口(interface)和继承

c# - IUnknown 接口(interface) - 对于 COM\COM + 对象?

java - 在 Java 中克隆对象 [3 个问题]

c++ - 使类抽象化有什么好处