【发布时间】:2010-10-15 14:48:54
【问题描述】:
我正在从 C++ 学习 C#,但遇到了障碍。
我有一个抽象类 AbstractWidget、一个接口 IDoesCoolThings 和一个派生自 AbstractWidget 的类 RealWidget:
public interface IDoesCoolThings
{
void DoCool();
}
public abstract class AbstractWidget : IDoesCoolThings
{
void IDoesCoolThings.DoCool()
{
Console.Write("I did something cool.");
}
}
public class RealWidget : AbstractWidget
{
}
当我实例化一个 RealWidget 对象并对其调用 DoCool() 时,编译器给我一个错误提示
'RealWidget' 不包含 'DoCool' 的定义
我可以将 RealWidget 对象转换为 IDoesCoolThings,然后调用将起作用,但这似乎没有必要,而且我也失去了多态性(即使我定义了 RealWidget.DoCool(),AbstractWidget.DoCool() 也将始终被调用)。
我认为解决方案很简单,但我尝试了很多方法,但终生无法解决这个问题。
【问题讨论】:
-
要在小部件的 DoCool() 中具有多态性,您需要声明 AbstractWidget 的一个虚拟部件。
-
尔格。我在某处读到了接口方法隐含的 virtual。
标签: c# inheritance interface abstract-class