在C#override中,修饰符在基类的虚拟/抽象方法的派生类中是必需的

Sri*_*ddy 3 c# oop inheritance overriding

public class Shapes
{
  public virtual void Color()
  {
    Console.WriteLine("Shapes");
  }
}

public class Square : Shapes
{
  public void Color()
  {
    Console.WriteLine("Square");
  }
}

public class Test
{ 
  public static void main()
  {
    Shapes s1 = new Shapes();
    s1.Color();
    Shapes s2 = new Square();
    s2.Color();
  }
}
Run Code Online (Sandbox Code Playgroud)

我想知道基类是否已经定义了一些虚拟方法,那么在derive类中是否必须覆盖它们?同样,如果基类方法是抽象的,我们需要在派生类中实现该方法,但是override修饰符是必需的吗?如果省略override修饰符怎么办?

dle*_*lev 7

我想知道基类是否已经定义了一些虚拟方法,那么在derive类中是否必须覆盖它们?

当然不.由派生类决定是否覆盖虚方法.请注意,某些类会建议派生类在某些情况下覆盖特定的虚方法,但编译器不会强制执行该操作.

如果基类方法是抽象的,我们需要在派生类中实现该方法,但是override修饰符是必需的吗?

是的,您需要使用override关键字,否则该方法将被派生类中的定义隐藏.

如果您实际运行代码,您将看到两次打印"形状".那是因为类中的Color()方法Squares没有使用override关键字声明.因此,它隐藏了基类方法.这意味着它只能通过以下类型的变量访问Squares:

Squares s3 = new Squares();
s3.Color();
Run Code Online (Sandbox Code Playgroud)

这将打印"Square",因为您正在调用正确类型的变量上的方法.