3

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

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

public interface IBar {
    bool Bar();
}

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

public class Foo1 : FooBase, IBar {
}

编译器将继承的受保护方法作为接口的可公开访问实现是否存在某种类声明魔法?

当然,一个 Foo1 方法

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

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

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

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

4

3 回答 3

6

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

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

    int ICollection.Count
    {
        get
        {
            return Count;
        }
    }
}
于 2009-08-08T19:23:55.237 回答
1

我相信您的代码尽可能短。不要认为那里有任何捷径。

于 2009-08-08T19:20:13.793 回答
1

受保护的成员FooBase.Bar()不是接口 IBar 的实现方法。该接口需要一个公共方法Bar()

有两种实现接口的方法。显式实现或隐式实现。

以下是显式实现。如果通过 IBar 变量调用 Foo 的对象,则调用此方法。

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

定义公共方法 Bar() 是隐式实现

To have the compiler satisfied you might override or new the baseclass method as public (not a good advise, if method is protected in baseclass).

new public bool Bar() 
{
    return base.Bar();
}

The trick is to implement an interface, but not having all interface members as public members in the class.

于 2009-08-08T20:10:04.737 回答