【发布时间】:2013-07-24 20:34:37
【问题描述】:
假设您可以访问实现“IFoo”的基类“MyClass”。 'IFoo' 定义了函数 'int FooValue()' 并且 'MyClass' 显式地实现了它。现在假设您有一个名为“MySubClass”的“MyClass”子类,并且您想覆盖该子类中的“FooValue”,但您还希望子类的实现基于基类实现的结果。
现在通常,只需将实现移动到基类中的受保护函数即可解决此问题,然后我们只需在子类中覆盖该函数即可。做完了。但是我们无权访问基类的源代码。我们仅将其作为对库的引用。那么如何解决呢?
不是重复的(更新:...就像这个)!
这里有一个这样的问题...C#: Property overriding by specifying the interface explicitly...这表明虽然您不能通过普通通道本身覆盖基类的接口,但您可以显式地重新实现子类上的相同接口,其行为就像您正在覆盖该接口(但实际上您是在重新实现它,而不是覆盖它。)也就是说,我想弄清楚的是我如何获得基类的实现。 (这就是为什么恕我直言,这不是那个问题的重复。)
这里是基类的一些伪代码,我们也无法访问代码...
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;
}
}
那么这可能吗?
【问题讨论】:
-
我发誓...我搜索和搜索,我什至浏览了所有的“嘿...您可能会问与...相同的问题”,当您输入您的标题,我没有发现任何类似的东西,但令我惊讶的是 bang... 没错,我问的是完全相同的问题,我的被标记为 dup! WTF我找不到吗?我真的搜索过,我发誓!每 d*@$# 次!大声笑!
-
我不确定是否可以使用一些“诚实”的方式,但您始终可以使用反射来获取并执行您想要的任何私有方法;)
标签: c# interface overriding base