假设您可以访问实现“IFoo”的基类“MyClass”。'IFoo' 定义了函数 'int FooValue()' 并且 'MyClass' 显式地实现了它。现在假设您有一个名为“MySubClass”的“MyClass”子类,并且您想覆盖该子类中的“FooValue”,但您还希望子类的实现基于基类实现的结果。
现在通常,这可以通过简单地将实现移动到基类中的受保护函数来解决,然后我们只需在子类中覆盖它。做完了。但是我们无权访问基类的源代码。我们仅将其作为对库的引用。那么你如何解决这个问题呢?
不是重复的(更新:......就像这个)!
这里有这个 SO 问题... C#: Property overriding by specific the interface ...这表明虽然您不能通过普通通道本身覆盖基类的接口,但您可以在 a 上显式地重新实现相同的接口子类,它的行为就像你正在覆盖接口(但实际上你正在重新实现它,而不是覆盖它。)也就是说,我想要弄清楚的是我如何获得基类的实现。(这就是为什么恕我直言,这不是那个问题的重复。)
这是基类的一些伪代码,同样,我们无法访问代码...
public interface IFoo
{
int FooValue();
}
public class MyClass : IFoo
{
int IFoo.FooValue() <-- Explicit implementation requiring a cast to access.
{
return 4;
}
}
这是我们正在尝试做的事情,但显然这是不允许的,因为你不能像这样使用'base'。
public class MySubClass : MyClass
{
int IFoo.FooValue()
{
int baseResult = ((IFoo)base).FooValue(); <-- Can't use 'base' like this
return baseResult * 2;
}
}
那么这可能吗?