如何调用显式实现的接口方法的基类实现

本文关键字:实现 接口 方法 基类 何调用 调用 | 更新日期: 2023-09-27 18:09:51

我试图调用在基类上实现的显式实现的接口方法,但似乎无法让它工作。我同意这个想法非常丑陋,但我已经尝试了我能想到的所有组合,但都无济于事。在这种情况下,我可以更改基类,但我认为我应该问这个问题来满足我的好奇心。

任何想法?

// example interface
interface MyInterface
{
    bool DoSomething();
}
// BaseClass explicitly implements the interface
public class BaseClass : MyInterface
{
    bool MyInterface.DoSomething()
    {
    }
}
// Derived class 
public class DerivedClass : BaseClass
{
    // Also explicitly implements interface
    bool MyInterface.DoSomething()
    {
        // I wish to call the base class' implementation
        // of DoSomething here
        ((MyInterface)(base as BaseClass)).DoSomething(); // does not work - "base not valid in context"
    }
}

如何调用显式实现的接口方法的基类实现

不能(它不是子类可用的接口的一部分)。在这种情况下,使用如下内容:

// base class
bool MyInterface.DoSomething()
{
    return DoSomething();
}
protected bool DoSomething() {...}

那么任何子类都可以调用受保护的DoSomething(),或者(更好):

protected virtual bool DoSomething() {...}

现在它可以重写而不是重新实现接口:

public class DerivedClass : BaseClass
{
    protected override bool DoSomething()
    {
        // changed version, perhaps calling base.DoSomething();
    }
}