为什么要使用覆盖?

时间:2018-11-29 05:10:41

标签: c# .net oop

在一次采访中,有人问为什么我们需要重写基类的方法。 当我们想要在派生类中实现不同的实现时,我试图做出回答。 但是随后他说:“为什么我们不创建一个具有不同名称和实现的新方法,而不是重写基类方法?”无论如何,我们不重用基类方法,因为实现会有所不同,然后创建一个新方法而不是覆盖。

我很困惑该怎么回答。有人可以解释。

public class BaseClass
{
  virtual void Foo(){}
}

public class DerivedClass: BaseClass
{
   override void Foo(){}
}

通常,我们像上面那样实现覆盖。 他说的就像是为什么我们需要覆盖的概念,我们可以像下面这样

public class BaseClass
{
  void Foo(){}
}

public class DerivedClass: BaseClass
{
   void Foo1(){}
}

我试图解释他的问题看起来很奇怪,但就像它是基类的方法一样,我们只是在派生类中对其进行了重新定义。这样,我们的代码也将变得干净。但是看起来他并不满意。

1 个答案:

答案 0 :(得分:0)

我会检查以下答案: Why does this polymorphic C# code print what it does?

然后尝试在基本上具有代码指针的对象中掌握方法的概念。当您在子类中override实现时,无论是否使用它或将其转换为超类,该代码都将成为所指向的新代码。

因此,覆盖的主要目的是创建从一个类继承但每个类都有自己的实现的类,然后能够像对待原始超类一样对它们进行处理或操作。这是Liskov原理或SOLID中的“ L”的本质。 What is an example of the Liskov Substitution Principle?