C# 继承保护方法实现接口(interface)

标签 c# class inheritance interface-implementation

我在 C# 中有这个类/接口(interface)定义

public class FooBase {
    ...
    protected bool Bar() { ... }
    ...
}

public interface IBar {
    bool Bar();
}

现在我想创建一个 Foo1 派生自 FooBase 实现 IBar 的类:

public class Foo1 : FooBase, IBar {
}

编译器将继承的 protected 方法作为接口(interface)的可公开访问实现,是否存在某种类声明魔法?

当然是一个Foo1方法

bool IBar.Bar()
{
    return base.Bar();
}

有效。我只是好奇是否有捷径;)

省略此方法会导致编译器错误:Foo1 未实现接口(interface)成员 IBar.Bar()。 FooBase.Bar() 是静态的、非公共(public)的或返回类型错误。

说明:我将代码继承(类层次结构)和功能实现(接口(interface))分开。因此,对于实现相同接口(interface)的类,访问共享(继承)代码非常方便。

最佳答案

没有捷径。事实上,这种模式在我见过的几个地方使用过(不一定与 ICollection 一起使用,但你明白了):

public class Foo : ICollection
{
    protected abstract int Count
    {
        get;
    }

    int ICollection.Count
    {
        get
        {
            return Count;
        }
    }
}

关于C# 继承保护方法实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1249672/

相关文章:

c# - 从 DispatchQueue.MainQueue.DispatchAsync 返回值

c++ - 当我收到 `slicing` 的案例时?

C++ 静态和动态绑定(bind)行为

c# - 了解 MongoDB 新 C# 驱动程序的变化(Async 和 Await)

c# - 将 InternalsVisibleTo 用于单元测试代码是否被认为是不好的做法?

c# - 转置数据表

c# - 派生类列表上的泛型函数

java - 通用 <T extends A> 类使用静态字段而不是 T 的静态字段

python - 类装饰器禁用 __init_subclass__

Java:在静态方法中从父类(super class)创建子类的实例