Effective C# Item 20: Distinguish Between Implementing Interfaces and Overriding Virtual Functions
Effective C# Item 20: Distinguish Between Implementing Interfaces and Overriding Virtual Functions
乍看之下,实现接口和重写虚方法是相似的,它们都为一个声明好的成员提供了定义。这种看法是错误的。实现接口和重写虚方法是有很大区别的。在默认情况下,在接口中声明的成员不是虚拟的。派生类不能够重写基类中实现的接口。
有一种方法可以让派生类修改基类中接口的实现。要实现这一点,我们需要为派生类创建一个钩子(hook)。
下面我们举一个例子,一个简单的接口和一个类对接口的实现如下:
interface IMsg

{
void Message();
}
public class MyClass : IMsg

{
public void Message()
{
Console.WriteLine("MyClass");
}
}Message()方法是MyClass类的公共接口中的一部分。我们也可以通过IMsg接口来访问MyClass类型中的成员。现在我门来让派生类中的情况稍微复杂一些:
