Как получить переменную из класса Dervied для использования при выполнении метода из базового класса? - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь использовать два разных производных класса, которые наследуются от базового класса, каждый из которых имеет логическую переменную, которая отличается от другой. Логическое значение было назначено как в базовом, так и в производном классах. Однако когда я получаю доступ к методу из производного класса, который объявлен только в базовом классе, логический результат приводит к результату базового класса.

Я уже пытался выполнить метод в каждом классе, который инициализирует свои объявленные переменные. Изменений не было.

public partial class Form2 : Form
{
    public class BaseC : Form
    {
        public bool reversePlace = false;

        public void computeInput(BaseC cc)
        {
            if (reversePlace)
            {
                //Execute condition
                if (cc.reversePlace)
                {
                    //Execute execution from other derived class
                }
            }
        }
    }


    public class DerivedC1 : BaseC
    {
        public bool reversePlace = true;
    }

    public class DerivedC2 : BaseC
    {
        public bool reversePlace = false;
    }

    DerivedC1 C1 = new DerivedC1();
    DerivedC2 C2 = new DerivedC2();

    public Form2()
    {
        C1.computeInput(C2); //Should execute first condition for being true while ignoring the inner condtion for being false
    }

}

Я должен получить оператор if из C1 на полпути, пропуская условие if для C2. Логическое значение С1 должно быть истинным, а С2 - ложным. Однако оба логических значения рассматриваются как ложные.

Ответы [ 3 ]

0 голосов
/ 18 апреля 2019

Я бы потратил некоторое время на изучение наследования, особенно таких вещей, как виртуальные свойства и методы, и на то, как их переопределить.

Ваш базовый класс обычно должен использовать ключевое слово virtual и переопределять его при необходимости для дочерних методов и классов.

Вот ссылка, которая поможет вам получить общее представление: https://www.c -sharpcorner.com / UploadFile / 3d39b4 / virtual-method-in-C-Sharp /

0 голосов
/ 18 апреля 2019

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

...

public class DerivedC1 : BaseC
{
    public DerivedC1()
    {
        this.reversePlace = true;
    }
}

public class DerivedC2 : BaseC
{
    public DerivedC2()
    {
        this.reversePlace = false;
    }
}

...
0 голосов
/ 18 апреля 2019

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

public class BaseC : Form
{
    public virtual bool ReversePlace => false;
    //etc....
}


public class DerivedC1 : BaseC
{
    public override bool ReversePlace => true;
}

public class DerivedC2 : BaseC
{
    public override bool ReversePlace => false;
}
...