Можно ли запустить метод override в родительских и прародительских классах базового & ldquo; virtual & rdquo; метод [дубликат]

Все вышеизложенное можно избежать, просто объявив значение друга для времени выполнения в стартовой форме.

Public Class Form1 
Friend sharevalue as string = "Boo"

Затем доступ к этой переменной из всех форм с помощью Form1.sharevalue

-1
задан T.Todua 22 February 2019 в 12:24
поделиться

2 ответа

Обновление

, к сожалению, не помогает в моем случае, потому что я не контролирую ни другие части кода, ни main (), как выполнения ... Я просто пишу модуль для существующего приложения, которое мой Parent_1 используется только как промежуточный между Parent_2 и Base

Вы не можете, и нет никакого способа сделать это, я знаю (даже с отражением), Полиморфизм в C # фактически гарантирует что переопределенный метод будет вызван, если вы не скажете ему сделать это в переопределенном методе с base

Оригинал

Если я понимаю, что вы описываете ... Переопределение не сработает базовый метод если вы явно не скажете это сделать.

public class Parent_2 : Parent_1
{ 
    public override void hello ()
    { 
       base.hello();
       Print("Hi 2"); 
    }
}

Дополнительные ресурсы

Полиморфизм (Руководство по программированию в C #)

Базовые классы могут определять и реализовывать виртуальные методы и производные классы могут переопределять их, что означает, что они предоставляют свое собственное определение и реализацию. Во время выполнения, когда клиентский код вызывает метод, CLR ищет тип объекта во время выполнения и вызывает переопределение виртуального метода. Таким образом, в вашем исходном коде вы можете вызывать метод базового класса и вызывать исполнение метода производного класса .

base (C # Reference)

Базовое ключевое слово используется для доступа к членам базового класса из производного класса:

[1129 ]
  • Вызовите метод базового класса, который был переопределен другим методом.

  • Укажите, какой конструктор базового класса следует вызывать при создании экземпляров производного класса.


    • public class Base
      {
          public virtual void hello()
          {
          }
      }
      
      //
      public class Parent_1 : Base
      {
          public override void hello()
          {
              Console.WriteLine("Hi 1");
          }
      }
      
      public class Parent_2 : Parent_1
      {
          public override void hello()
          {
              base.hello();
              Console.WriteLine("Hi 2");
          }
      }
      
      public static void Main()
      {
          Parent_1 p = new Parent_2();
          p.hello();
      }
      

      Вывод

      Hi 1
      Hi 2
      

      Полная демонстрация здесь

    0
    ответ дан TheGeneral 22 February 2019 в 12:24
    поделиться

    Ну, почему вы не можете вызвать базовый класс один, используя ключевое слово base

    public class Parent_2 : Parent_1
    {         
        public override void hello (){ base.hello(); Print("Hi 2"); }        
    }
    
    0
    ответ дан Rahul 22 February 2019 в 12:24
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: