Как получить производный метод для изменения одной из его базовых переменных или объектов, а затем вызвать измененный объект извне класса? - PullRequest
0 голосов
/ 23 апреля 2019

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

В базе присвоено значение false, и я пытаюсь переключить его на true в производном методе. Когда я вызываю производную переменную извне классов, она возвращает значение false. Я уже пытался изменить переменную, используя производный класс в качестве универсального параметра, но безуспешно.

public class CPlayer : Hybrid
    {
        public TextBox inputTBox { get; set; }

        public CPlayer(TextBox InputTBox) : base(InputTBox)
        {
            inputTBox = InputTBox;
        }

        public void initiateStats()
        {
            proteinMeterMax = 125;
            proteinMeterCurrent = 125;
        }
    }

public class Hybrid
    {
        public TextBox inputTBox { get; set; }

        public bool stopOn = false;

        public Hybrid(TextBox InputTBox)
        {
            inputTBox = InputTBox;
        }

        public void runResult<T>(T hy) where T : Hybrid
        {
            hy.stopOn = true; //Trying either format to be certain.
            stopOn = true;
        }
    }


CPlayer cy = new CPlayer(inputBox);    

public void doSomething() {
cy.runResult(cy);

    if (cy.stopOn) {
        //I want something to happen when this is true. But it keeps returning false.
    }

}

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

1 Ответ

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

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

Например:

public class BaseClass
{
   public virtual bool stopOn {get;set;} = true;

   public virtual bool MethodName()
   {
       return stopOn;
   }
}

public class DerivedClass : BaseClass
{
   public override bool stopOn = false; // For property

   public override bool MethodName()  // For method
   {
       return stopOn;
   }
}

В моем случае вы можете изменить значение свойства Base напрямую, без переопределения:

public class BaseClass
{
   public virtual bool stopOn {get;set;} = true;
}

public class DerivedClass : BaseClass
{
    public DerivedClass(){
             stopOn = false;
    }
}

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

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