Невозможно использовать виртуальный и переопределить один и тот же метод в C#

Таким образом, очевидно, вы не можете использовать модификатор virtualс модификатором override.

virtual-метод, который можно переопределить

override-метод, переопределяющий метод с таким же именем в родительском классе

Это наводит меня на мысль, что если я переопределю метод в дочернем классе, если у этого потомка есть дочерний элемент, вы не сможете снова переопределить этот метод.

И можно с уверенностью сказать, что если вы поместите overrideи virtualв объявление метода, вы получите ошибку компиляции в C #.

Однако я не могу понять, почему код, который я сделал ниже, работает так, как он работает

using System;
public class DrawingObject
{
public virtual void Draw()
{
    Console.WriteLine("Drawing Object");
}
}
public class DrawDemo
{
     public static int Main()
     {
          DrawingObject[] dObj = new DrawingObject[3];


          dObj[0] = new DrawingObject();
           dObj[1] = new Line();
           dObj[2] = new LittleLine();

           foreach (DrawingObject drawObj in dObj)
           {
                drawObj.Draw();
           }
            Console.Read();
           return 0;
       }
  }
 public class Line : DrawingObject
 {
       public override void Draw()
       {// the method above me is in fact virtual because LittleLine overid it?
               Console.WriteLine("I'm a Line.");
       }
  }
  public class LittleLine : Line
  {
       public override void Draw()
       {
              Console.WriteLine("I'm a Little Line.");
         }
    }

Вот результат:

Drawing Object

I'm a Line.

I'm a Little Line.

Таким образом, метод draw в Lineвыглядит так, как будто он был переопределен в LittleLine. Этот код на самом деле не переопределяет его, или компилятор делает какой-то другой трюк? Или я не понимаю контекст virtualи override?

17
задан Null 2 September 2015 в 21:34
поделиться