Свойства интерфейсов С#

192
17 августа 2018, 19:10

Есть простая структура:

interface IFoo
{
    string a{ get; set; }
}
class Program
{
    class TestClass : IFoo
    {
        public string a
        {
            get { return a; }
            set
            {
                if(DateTime.Now.DayOfWeek != DayOfWeek.Monday)
                    a = value; //Здесь
                else
                    a = "smth";
            }
        }
        public TestClass(string str)
        {
            a = str;
        }
    }
    static void Main(string[] args)
    {
        IFoo qu = new TestClass("lol");
        Console.WriteLine(qu.a);
        Console.ReadKey();
    }
}

На сколько я знаю, у интерфейсов не должно быть полей, но свойства разрешены. Всё же, вызов сетера(в в строке "Здесь" ) кидает StackOverflow. Вопрос: почему?

Answer 1

В отметках "Здесь"

        set
        {
            if (DateTime.Now.DayOfWeek != DayOfWeek.Monday)
                a = value; //Здесь
            else
                a = "smth"; //Здесь
        }

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

    private string _a;
    public string a
    {
        get { return _a; }
        set
        {
            if (DateTime.Now.DayOfWeek != DayOfWeek.Monday)
                _a = value; //Здесь
            else
                _a = "smth"; //Здесь
        }
    }

Интерфейсы к вашему вопросу не имеют абсолютно никакого отношения.

READ ALSO
Дать каждому файлу рандомное имя

Дать каждому файлу рандомное имя

Создал массив с путями до файлов и создал коллекцию в которую поместил массивДалее написал цикл, который копирует содержимое файлов и дает...

170
Unity. Сцена стала долго грузиться

Unity. Сцена стала долго грузиться

Всем привет! Проблема такая: 18 июня у меня сцена в мобильной игре грузилась за 1-2 секунды, а вот 30 июня сцена стала грузиться 5-6-7 секундКод почти...

151
CefSharp Не проходит reCAPTCHA

CefSharp Не проходит reCAPTCHA

Использую последнюю версию CefSharpWPF (x64 проект)

135
Как открыть другую форму в С#?

Как открыть другую форму в С#?

Форма авторизацииПри вводе правильного пароля

166