Что делать с ошибкой StackOverFlowException

197
10 апреля 2022, 21:20

Мой код:

using System;

namespace WorkWithInterface
{
    class Program
    {
        static void Main(string[] args)
        {
            eCar ecar = new eCar(200, 4, "AUDI", State.Накачены);
            Console.ReadKey();
        }
    }
    public abstract class Car
    {
        public abstract int MaxSpeed { get;  set; }
        public Car(int maxSpeed) { MaxSpeed = maxSpeed; }
    }
    class eCar : Car, ICar, ITyre
    {
        public override int MaxSpeed { get; set; }
        public int Wheels { get; set; }
        public string Mark { get; set; }
        public State State
        {
            get => State;
            set
            {
                State = value;
                StateCar = State == State.Накачены;
                if (StateCar)
                    OnAction += Move;
                else
                    OnAction -= Move;
                OnAction?.Invoke();
            }
        }
        private bool StateCar { get; set; }
        public Action OnAction { get; set; }
        public eCar(int maxSpeed, int wheels, string mark, State state) : base(maxSpeed)
        {
            MaxSpeed = maxSpeed;
            Wheels = wheels;
            Mark = mark;
            State = state;
            OnAction = GetState;
        }
        public void Move()
            => Console.WriteLine($"{Mark} поехал со скоростью {MaxSpeed / 2}");
        public void GetState()
        {
            Console.WriteLine(StateCar 
                ? $"Электромобиль может ехать. Колеса {State}"
                : $"Электромобиль не может ехать. Колеса {State}");
        }
    }
    class gCar : Car, ICar, ITyre
    {
        public override int MaxSpeed { get; set; }
        public int Wheels { get; set; }
        public string Mark { get; set; }
        public State State
        {
            get => State;
            set
            {
                State = value;
                StateCar = State == State.Накачены;
                if (StateCar)
                    OnAction += Move;
                else
                    OnAction -= Move;
                OnAction?.Invoke();
            }
        }
        private bool StateCar { get; set; }
        public Action OnAction { get; set; }
        public gCar(int maxSpeed, int wheels, string mark, State state) : base(maxSpeed)
        {
            MaxSpeed = maxSpeed;
            Wheels = wheels;
            Mark = mark;
            State = state;
            OnAction = GetState;
        }
        public void Move()
            => Console.WriteLine($"{Mark} поехал со скоростью {MaxSpeed / 2}");
        public void GetState()
        {
            Console.WriteLine(StateCar
                ? $"Бензиновый автомобиль может ехать. Колеса {State}"
                : $"Бензиновый автомобиль не может ехать. Колеса {State}");
        }
    }
    interface ICar
    {
        string Mark { get; set; }
        void Move();
    }
    interface ITyre
    {
        int Wheels { get; set; }
        State State { get; set; }
        void GetState();
        Action OnAction { get; set; }
    }
    enum State { Проткнуты, Лопнуты, Накачены, Сняты}
}
Answer 1

Ошибка здесь. Вы обращаетесь из свойства к этому же свойству, что приводит к рекурсии и переполнению стека. Создайте поле {private State _state;} и обращайтесь к нему.

public State State
{
    get => State;
    set
    {
        State = value;
        StateCar = State == State.Накачены;
        if (StateCar)
            OnAction += Move;
        else
            OnAction -= Move;
        OnAction?.Invoke();
    }
}
READ ALSO
Как лучше работать со словарем

Как лучше работать со словарем

У меня есть метод, на вход подается простой словарь (Dictionary cars), который содержит цвет и модель(key-color, values-model)мне нужно нарисовать таблицу в которой...

166
Загрузка связанных данных EF

Загрузка связанных данных EF

Имеется таблица Tickets, у которой несколько связейЧтобы загрузить все необходимые связанные данные, получается такой запрос:

95
Нужно ввести значение переменной с клавиатуры в классе и в основном коде эту переменную добавить в List<>

Нужно ввести значение переменной с клавиатуры в классе и в основном коде эту переменную добавить в List<>

У меня есть 4 фигуры (соответственно 4 класса) и нужно каждой фигуре ввести свои значения, чтобы подсчитать площадьНужно реализовать ввод...

295
Не находится файл на локальном сервере

Не находится файл на локальном сервере

Всё происходит на Денвере Файл находящийся в папке css при css коде: 'background: url(/images/sprite

94