【发布时间】:2021-10-26 04:28:19
【问题描述】:
我正在阅读 Joe Albahari 出色的“C# 9 in a Nutshell”的以下摘录,并试图理解这里用粗体字描述的内容。有没有人能够以我能更好理解的方式解释替代方法?出于某种原因,这对我来说似乎有些落后。
接口重新实现的替代方案 即使使用显式成员实现,接口重新实现也存在问题,原因有以下几个:
子类没有办法调用基类方法。
基类作者可能没有预料到方法会被重新实现,并且可能不会考虑到潜在的后果。
当没有预期子类化时,重新实现可能是一个很好的最后手段。然而,更好的选择是设计一个基类,这样就永远不需要重新实现。有两种方法可以实现:
当隐式实现成员时,如果合适,将其标记为虚拟。
显式实现成员时,如果您预计子类可能需要覆盖任何逻辑,请使用以下模式:
public class TextBox : IUndoable { void IUndoable.Undo() => Undo(); // Calls method below protected virtual void Undo() => Console.WriteLine ("TextBox.Undo"); } public class RichTextBox : TextBox { protected override void Undo() => Console.WriteLine("RichTextBox.Undo"); }如果您不期望任何子类化,您可以将该类标记为密封以抢占接口重新实现。
【问题讨论】:
-
Is anyone able to explain the alternative approach in a way that I can understand better?第二个代码块的哪个特定方面对您没有意义?这对我来说很有意义,但我不确定什么对你没有意义 - 所以我不知道应该关注什么......
标签: c# interface class-hierarchy interface-implementation