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

    @Meloman19
    Ты не совсем понял проблему многопоточности. Да, чтение неизменяемого значения из множества потоков безопасно, но вот изменение - нет.

    На примере:
    Лежит в памяти значение x = 1. Пока его только читают, всё ок, но предположим, что это у нас какой-то счётчик и два потока хотят его увеличивать на 1.

    Первый поток считывает значение, кладёт его в стек, добавляет 1 и после записывает результат (2) обратно. Сам видишь, что тут отнюдь не одна операция, и между моментом считывания и записью проходит время. В это время второй поток может спокойно успеть считать пока ещё старое значение. Выходит, что оба потока возьмут 1, увеличать её на 1 и запишут в память, не важно в каком порядке. В результате вроде как оба потока отработало код, но значение в памяти увеличено только на 1. В этом и проблема.

    Списки, к примеру, внутри хранят тот же счётчик для количества элементов, поэтому одновременная запись может неправильно отработать.
    Ответ написан
  • Property и Fields?

    @Meloman19
    Свойства - это лишь абстракция. Любое свойство с геттером и сеттером по сути разворачивается в два обыкновенных метода. Для программы они ничем не выделяются особенным, это нужно лишь программисту.

    В этих самых геттерах и сеттерах ты можешь работать с полями, как и в любом другом методе класса.

    Автосвойство - это лишь упрощение, если требуется свойство, в котором кроме установки значения одного поля, иной логики нет. В закулисье автосвойство просто само по себе создаёт поле и два (или один) метод, который возвращает значение этого поля (или устанавливает).

    Что касается памяти: поле занимает место в памяти и для каждого экземпляра своё место. Геттеры и сеттеры свойства, как и обыкновенные методы - только один раз в памяти.
    Ответ написан
  • C#. Как изменить разрешение экрана?

    @Meloman19
    Стандартного способа, встроенного в стандартные библиотеки, насколько я знаю - нет.

    Всё через PInvoke и WinAPI.
    Рабочий пример можно посмотреть тут.
    Ответ написан
  • Почему сравнение эта string строка не равна такой же строке после string.Format()?

    @Meloman19
    Потому что сравнение string и сравнение object - это разные вещи.
    String сравнивается посимвольно, как и должно быть, а у object сравниваются ссылки на экземпляры.

    Переменные client и broker компилятор для оптимизации ссылает на один и тот же экземпляр string, поэтому сравнение их, как object, возвращает True. В случае же agent, создаётся новый экземпляр string (Format вызывает new string()), поэтому сравнение их, как object, возвращает False.
    Ответ написан
  • Как можно избавиться от подобного мусора в коде?

    @Meloman19
    Множество лейблов, которые при наведении делают одно и то же? Не проще ли создать всего один обработчик и на него привязать события со всех нужных лейблов?
    private void label_MouseEnter(object sender, EventArgs e)
    {
       (sender as Label).ForeColor = Color.FromArgb(35, 33, 61);
    }
    
    private void label_MouseLeave(object sender, EventArgs e)
    {
       (sender as Label).ForeColor = Color.White;
    }


    Теперь во всех событиях указывает один и тот же обработчик.
    Ответ написан