本文通过虚拟函数来实现接口在继承类里的重写。实现语言为C#。
通常如果我们定义了一个接口如下:
interface IMyInterface
{
void Foo(int i);
}
然后我们在类Base里实现了此接口,如下:
class MyClassBase
{
protected void Foo(int i){ MessageBox.Show("The value of i is " + i.ToString()); }
private void SomeOtherFun(){}
}
现在我们想在继承类里面重写Foo,也就是重新实现这个接口,但是C#不支持这样的接口重写,我们可以通过以下的方式来达到目标:
1. 更改MyClassBase如下:
class MyClassBase
{
public void Foo(int i){ FooImple(i); }
protected virtual void FooImpl(int i){ MessageBox.Show("The value of i is " + i.ToString()); }
private void SomeOtherFun(){}
}
从而继承类可以重写接口如下:
class MyChildClass : MyClassBase
{
public virtual void FooImpl(int i){ MessageBox.Show("The value of i^2 is " + (i * i).ToString()); }
}
本文介绍了在C#中如何通过使用虚拟函数来重写已实现的接口。当基类实现了接口,而派生类需要不同实现时,可以通过将基类中的接口方法改为公共并调用一个受保护的虚拟方法来实现。具体做法是在基类中声明一个公共的Foo方法,调用受保护的虚拟方法FooImpl,并在派生类中重写FooImpl以达到重写接口的效果。
890

被折叠的 条评论
为什么被折叠?



