Все вышеизложенное можно избежать, просто объявив значение друга для времени выполнения в стартовой форме.
Public Class Form1
Friend sharevalue as string = "Boo"
Затем доступ к этой переменной из всех форм с помощью Form1.sharevalue
, к сожалению, не помогает в моем случае, потому что я не контролирую ни другие части кода, ни main (), как выполнения ... Я просто пишу модуль для существующего приложения, которое мой Parent_1 используется только как промежуточный между Parent_2 и Base
blockquote>Вы не можете, и нет никакого способа сделать это, я знаю (даже с отражением), Полиморфизм в C # фактически гарантирует что переопределенный метод будет вызван, если вы не скажете ему сделать это в переопределенном методе с
base
Оригинал
Если я понимаю, что вы описываете ... Переопределение не сработает базовый метод если вы явно не скажете это сделать.
public class Parent_2 : Parent_1 { public override void hello () { base.hello(); Print("Hi 2"); } }
Дополнительные ресурсы
Полиморфизм (Руководство по программированию в C #)
Базовые классы могут определять и реализовывать виртуальные методы и производные классы могут переопределять их, что означает, что они предоставляют свое собственное определение и реализацию. Во время выполнения, когда клиентский код вызывает метод, CLR ищет тип объекта во время выполнения и вызывает переопределение виртуального метода. Таким образом, в вашем исходном коде вы можете вызывать метод базового класса и вызывать исполнение метода производного класса .
blockquote>Базовое ключевое слово используется для доступа к членам базового класса из производного класса:
[1129 ]Вызовите метод базового класса, который был переопределен другим методом.
Укажите, какой конструктор базового класса следует вызывать при создании экземпляров производного класса.
blockquote>
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
Ну, почему вы не можете вызвать базовый класс один, используя ключевое слово base
public class Parent_2 : Parent_1
{
public override void hello (){ base.hello(); Print("Hi 2"); }
}