了解 C# 中的重写和方法隐藏
本文阐明了 C# 中重写和方法隐藏之间的区别,这是两种强大但经常令人困惑的继承机制。 选择正确的方法对于构建健壮且可维护的面向对象应用程序至关重要。
重写:扩展基类行为
重写是面向对象编程的基石,它允许派生类为其基类中已定义的方法提供专门的实现。 至关重要的是,方法的签名(名称、参数和返回类型)保持不变。 这可以实现多态性,即根据对象的运行时类型而不是其声明的类型来执行正确的方法。
方法隐藏:隐藏基类方法
相反,方法隐藏涉及在派生类中创建一个与基类方法共享相同名称但具有不同签名(例如不同的参数类型或返回类型)的方法。 这有效地屏蔽了派生类中的基类方法。 无论变量声明的类型如何,编译器将始终调用派生类的方法。
重写和方法隐藏的策略应用
当您需要扩展或细化基类方法的行为同时保留其基本目的时,重写是首选。 它对于实现多态性和遵守健全的面向对象设计原则至关重要。
方法隐藏虽然不太常见且常常不被鼓励,但却找到了利基应用:
说明性示例
让我们看一下 C# 代码示例:
<code class="language-csharp">class BaseClass { public virtual void DisplayNumber() { Console.WriteLine(12); } public virtual void DisplayText() { Console.WriteLine("abc"); } } class DerivedClass : BaseClass { public new void DisplayNumber() { Console.WriteLine(42); } public override void DisplayText() { Console.WriteLine("xyz"); } } BaseClass baseInstance = new BaseClass(); BaseClass derivedInstance = new DerivedClass(); DerivedClass clearlyDerived = new DerivedClass(); baseInstance.DisplayNumber(); // Output: 12 baseInstance.DisplayText(); // Output: abc derivedInstance.DisplayNumber(); // Output: 12 derivedInstance.DisplayText(); // Output: xyz clearlyDerived.DisplayNumber(); // Output: 42 clearlyDerived.DisplayText(); // Output: xyz</code>
观察到 DisplayNumber()
隐藏在 DerivedClass
中,而 DisplayText()
被覆盖。 输出演示了运行时类型如何决定执行哪个方法。
结论:为了清晰起见,优先考虑覆盖
重写使派生类能够在不破坏已建立的接口的情况下定制基类功能。 方法隐藏虽然在有限的情况下有用,但应谨慎使用以避免歧义并保持清晰的继承层次结构。 在大多数情况下,重写提供了更优雅且可维护的解决方案。
以上是C# 中的重写与方法隐藏:我什么时候应该使用哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!