是否可以在c#中调用基类的显式接口实现?

本文关键字:基类 显式接口实现 调用 是否 | 更新日期: 2023-09-27 18:13:36

我想编译这个程序,然后打印下面的输出:

public interface IFoo
{
    void Bar();
}
public class FooBase : IFoo
{
    void IFoo.Bar()
    {
        Console.WriteLine("Hello from base class.");
    }
}
public class Foo : FooBase, IFoo
{
    void IFoo.Bar()
    {
        (base as IFoo).Bar(); // doesn't compile
        Console.WriteLine("Foo added some behavior!");
    }
}
public static class Program
{
    public static void Main(string[] args)
    {
        var foo = new Foo() as IFoo;
        foo.Bar();
    }
}
所需输出:

Hello from base class.
Foo added some behavior!

显然,上面的代码不能编译,因为它是使用base关键字的无效方法。有没有一种方法可以做到这一点,而不改变基类中的实现为非显式的?

是否可以在c#中调用基类的显式接口实现?

您可以简单地让基类中的显式接口实现调用类中的受保护方法来实现它。这允许其他派生类仍然调用受保护的方法,同时仍然显式地实现接口(并且也不会通过类型本身公开暴露接口的方法,这可能是实际的目标)。