Ответы пользователя по тегу ООП
  • Почему C# не позволяет делать Downcast от родителя к потомку?

    @tex0
    Хочется понять на теоретическом уровне.

    У вас есть два множества:
    1) Person - большее множество, производное.
    2) People - родитель, является подмножеством Person и входит него полностью.
    Так вот - из большего(производного) множества вы можете выделить подмножество, т.к. это подмножество целиком и полностью входит в производное. А вот из меньшего(родительского) выделить большее(производное) никак нельзя. У вас тупо нет данных об остальных элементах производного множества.

    А теперь на пальцах:
    У вас есть листок бумаги. Он является составным объектом из всех потенциальных(!!!) произвольных его частей(вырезанных областей, оторванных кусков и т.п.). Получается что физически вы можете из этого листка бумаги выделить/оторвать/вырезать любой кусок, находящийся в его составе(приведение большего к меньшему), а вот из любого меньшего куска этого листка получить общий, производный, уже нет.
    Именно по этому приведение базового к производному - некорректная операция с точки зрения логики и является, в вашем случае, ошибкой.
    Ответ написан
    2 комментария
  • Перегрузки методов без дублирования кода в C#?

    @tex0
    Что вы делаете в таком случае?...Разбиваете внутренности метода на отдельные методы и выносите их отдельно, обращаясь к ним в каждой из перегрузок?

    This!
    Это лучше чем дублировать код, от которого потом рябит в глазах=).
    Лично я, имея длинный метод, всегда разрезаю его на подзадачи, тем самым выделяя основной функционал, а весь остальной обвес получается как частные случаи (это ещё и полезно для развития навыка классификации данных).
    Ответ написан
    Комментировать
  • Как назначить интерфейс PasswordBox?

    @tex0
    Проблема в том, что основной класс PasswordBox нельзя наследовать.

    могу предложить описать требуемый интерфейс IPasswordBox, затем создать UserControl, унаследовать его от IPasswordBox и агрегировать туда стандартный PasswordBox, выделив нужные свойства на функционал интерфейса.
    (Ну в общем агрегирование используйте. Тоже костыль, но уже более вменяемый хотя бы потому что свой велосипед не нужно писать, а подключить существующий)
    Ответ написан
    1 комментарий
  • Как обратиться к методу класса Form из другого класса?

    @tex0
    Управляет данными на форме и содержит алгоритмическую часть решения


    тогда примерно так

    class Form1 : Form
    {
        public Form()
        {
            // конструируем форму
            AnothertypeObject  = new AnotherType(this); // создаем объект контроллера в нужном нам месте. 
            //По умолчанию создаю в конструкторе формы
        }
    
        public AnotherType AnothertypeObject {get; private set;}
        // остальной код
    }
    
    public interface IFormController
    {
        void DoSomething();
    }
    
    class AnotherType : IFormController
    {
        private Form host_;
        public AnotherType(Form host)
        {
            host_ = host;
        }
       
        public void DoSomething()
        {
            // вызываем нужный метод объекта host_
        }
        // другая логика
    }


    решение топорное, но для примера думаю сойдёт.
    Ответ написан