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

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Перегрузка индексатора
    public class Foo : Dictionary<string, int>
    {
        public new int this[string key]
        {
            get => this.GetValueOrDefault(key);
            set => base[key] = value;
        }
    }

    Foo f = [];
    string k = "key";
    Console.WriteLine($"Value not set: {f[k]}");
    f[k]++;
    Console.WriteLine($"Value ++: {f[k]}");
    f[k]++;
    Console.WriteLine($"Value ++: {f[k]}");
    f[k]--;
    Console.WriteLine($"Value --: {f[k]}");

    Value not set: 0
    Value ++: 1
    Value ++: 2
    Value --: 1
    Ответ написан
    Комментировать
  • Допустим у меня есть массив byte[] bytes и этот массив символизирует машинныый код программы, могу ли я запустить эту програму из своего кода?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Да, можете. Как-то так: https://keestalkstech.com/2016/05/how-to-add-dynam...
    Ответ написан
    Комментировать
  • Каким образом в WPF С# можно сделать так, чтобы кнопка закрытия (крестик) не закрывала окно?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Ответ написан
    Комментировать
  • Почему форма имеет такой некрасивый стиль?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Это стандартный вид стандартных окон ОС Windows. Не нравится стиль - всегда можно нарисовать свой. WinForms использует древнее легаси API GDI+. Есть еще WPF, MAUI - там уже более новое. У вас какой именно вариант? Там немножко по-разному стили задаются. При желании можно нарисовать все что угодно. Ко всему есть подробнейшие мануалы в сети.
    Ответ написан
    Комментировать
  • Почему не открывается после сборки?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Скорее всего что-то не было установлено - дотнет, библиотеки, пакеты и другие зависимости. Сделайте отладочную сборку с выводом всех ошибок и запустите её на целевой машине и смотрите, что оно требует. Аналогично с дистрибутивом - убедитесь, что все зависимости включены в дистрибутив и устанавливаются как и куда надо. Тоже сделайте отладочную сборку и проведите отладку дистрибутива.
    Ответ написан
    Комментировать
  • Как найти ближайшее число в списке из целых чисел?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Взять бумажку, ручку, лист бумаги и выполнить следующую последовательность действий:
    1. Расписать задачу текстом - что, как, зачем и почему
    2. Сделать декомпозицию задачи в несколько итераций до самых простых и понятных действий
    3. Написать простой и логичный псевдокод
    4. Используя написанный псевдокод реализовать логику в реальном коде
    5. Проверить и продебажить работу кода на каждом шаге, что все работает именно так, как и должно
    6. Внести исправления и доработки в код по необходимости
    Ответ написан
    Комментировать
  • Чем отличается в с# например int a {get;} от int a {get; private set;}?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    int a { get; }
    Свойство только для чтения: можно записать только в конструкторе или инициализаторе, а в методах класса и других способах нельзя изменить.

    int a { get; private set; }
    Свойство только для чтения снаружи класса: можно записать только внутри класса - в конструкторе, методе и в остальных способах.
    Ответ написан
    Комментировать
  • Как обезопасить программу С# от взлома?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Взломать можно все, что угодно - это лишь вопрос объема прикладываемых усилий/времени/денег для этого. Со стороны разработчика можно только осложнить этот процесс, но не предотвратить. Стандартная практика - осложнить взлом ровно на столько, чтобы объем затрачиваемых на взлом усилий себя не окупил или получаемая выгода была минимальна. Для начала вам следует определиться с ценностью того, что вы хотите защитить в своих приложениях и определиться с бюджетом времени/денег для затрат на защиту этих важных для вас данных, процессов и прочего. А уже потом прорабатывать меры защиты. Судя по вашим вопросам вам потребуется нанять консультанта, который поможет подобрать оптимальные для вас меры защиты.
    Ответ написан
    6 комментариев
  • Как разумно поставить себе начало в программировании (C++ и C#)?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Стоит ли мне двигаться дальше в изучении C++ или пока не поздно пересмотреть свои взгляды, касательно моего выбора?

    Если нравится и интересно - то да, почему нет-то? ЯП - всего лишь инструмент. Как молоток или гаечный ключ. Если умеешь пользоваться - то запросто берешь любой молоток и забиваешь гвоздь. Разонравятся плюсы или будут другие задачи, где плюсы не очень - переключайтесь на C#.

    Не поздно начинать своё обучение

    Нет, никогда не поздно.

    дайте пару советов и пожеланий, касаемо обучения

    Уже давно все есть: https://roadmap.sh/cpp

    Будут ли проблемы в трудоустройстве, если выбор останется неизменным

    В целом зависит только от вас и прикладываемых вами усилий. А так - под плюсы да, действительно вакансий не так уж много и есть некоторые сложности в их поиске, а те что есть - обычно ближе к оборудованию, робототехнике, МК и прочему. Если направление интересно - то почему нет-то? Еще отличным выбором будет C#/dotNet - сейчас он больше в сторону веба развивается, но и для десктопной разработки тоже достаточно популярен.
    Ответ написан
    1 комментарий
  • Можно ли демонстрировать или отображать программу .exe в окне своей же программы?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    И есть вообщем такая потребность, интегрировать окно Hammer Editor (Создание уровней для игр на движке Source) в проект.

    Это возможно при условии, если данное приложение предоставляет соответствующий интерфейс в виде DLL библиотеки. Смотрите документацию приложения либо его исходники, при наличии оных.
    Ответ написан
  • Как правильно реализовать большое приложение на c#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Организовать большую команду, состоящую из множества более маленьких команд, которые специализируются на своей части. Сам проект разбивается на множество более мелких проектов, а эти проекты на еще более мелкие модули. Для каждой задачи или группы проектов - своя команда. Разработка приложений такого объема занимают сотни тысяч и миллионы человеко-часов. Примерно так:
    1. Составляется краткое ТЗ
    2. Максимально подробно описывается проект в виде более детального ТЗ
    3. Нанимаете опытного IT менеджера
    4. Менеджер собирает команду для разработки частного ТЗ полностью со всеми деталями проекта
    5. На основе ЧТЗ формируются требования к командам для реализации проекта
    6. Подготавливается план разработки проекта
    7. Нанимается команда или команды сопровождения и поддержки - системные администраторы, менеджеры, аналитики, консультанты, бухгалтеры, юристы и прочие
    8. Организовывается рабочее пространство для команд разработки
    9. Нанимаются и организовываются команды разработки в соответствии с планом
    10. Ну и далее начинается основная работа - поэтапная реализация проекта
    Ответ написан
    Комментировать
  • Как не подгружать картинки в selenium? Сделать программу менее затратной по ресурсам?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Перегревается ПК и через пару часов отключает программу...нужно минимизировать затраты на программу

    Тут вам нужно охлаждение оптимизировать, а не программу:
    • Продуть радиаторы от пыли
    • Почистить пылевые фильтры
    • Обновить термопасту
    • Заменить и/или добавить вентиляторы
    • Правильно направить воздушные потоки внутри корпуса
    • Уложить провода
    • Открыть закрытые вентиляционные отверстия
    Ответ написан
    6 комментариев
  • Как устранить следующую ошибку в Visual Studio. Язык C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    ПКМ на подчеркнутом - установить пакет либо через нугет/консоль ручками.
    Ответ написан
    Комментировать
  • Как сделать конвертацию валют в C# в реальном времени?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Во-первых для валют следует использовать либо int либо decimal. Для получения же актуального курса валют используйте любое API в интернете - биржи, банки и т.д.
    Ответ написан
    Комментировать
  • Как на языке C# можно исключить ввод второго числа в консоль если выбранная операция извлечение корня?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Использовать стандартную проверку условия: если команде нужно одно число - то и просить ввода одного числа.
    Ответ написан
    Комментировать
  • Стоит ли брать Macbook AIR 13 m1 для разработки на VS + SQL MS?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Нет - проект VS для Мака закрыт. А то, что уже было сделано - не особо и юзабельно было. Про виртуалки на маке тоже можно забыть: потеря производительности для x86 примерно 90%. Берите машину с виндой. Мак имеет смысл брать только если будете разрабатывать ПО именно для него - вот тогда да, отладку и тестирование лучше сразу на нём проводить.
    Ответ написан
    Комментировать
  • На что можно заменить сервер WebSocketSharp?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Я для себя остановился вот на этом варианте: VIEApps.Components.WebSockets.
    Ответ написан
    Комментировать
  • Как обрабатывать событие клика глобально и двигать курсор в рамках всего монитора (или другого приложения)?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Использовать WinAPI для работы с устройствами ввода: хуки, сообщения, SendInput и т.п.
    Ответ написан
  • Как разделить UI и логику десктоп приложения C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Использовать стандартные паттерны типа MVC и MVVM. Для большинства приложений этого достаточно. Если приложение более сложное, то оно делится на компоненты в виде, опять же, стандартных библиотек и приложения/приложений.
    Ответ написан
    Комментировать
  • Какой лучший способ передать объект с приватными полями?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Если на обоих концах у вас dotNet или на одном JS, то можно попробовать MemoryPack - он умеет работать с приватными полями. Но есть нюанс: он хочет partial класс и сам генерирует основной класс с нужными ему статическими полями. Ну и для передачи по сети можно архиватором упаковать с контрольной суммой.

    spoiler

    Небольшой класс для упрощения упаковки/распаковки - наследуем от этого класса целевой объект и через расширение вызываем методы упаковки/распаковки:
        /// <summary>
        /// Класс [де]сериализуемый MemoryPack
        /// <br />Необходим для добавления всем наследуемым классам метода сериализации через расширение
        /// <br />Наследование данного метода не работает из-за каста в целевой класс
        /// </summary>
        public class Packable { }
    
        /// <summary>
        /// Расширение для [де]сериализуемых классов MemoryPack
        /// </summary>
        public static class PackableExtension
        {
            /// <summary>
            /// Сериализовать класс в массив байтов
            /// </summary>
            /// <typeparam name="T">Целевой класс</typeparam>
            /// <param name="data">Объект целевого класса</param>
            /// <returns></returns>
            public static byte[] Pack<T>(this T data) where T : Packable
                => MemoryPackSerializer.Serialize(data);
    
            /// <summary>
            /// Десериализовать класс из массива байтов
            /// </summary>
            /// <typeparam name="T">Целевой класс</typeparam>
            /// <param name="data">Массив байт</param>
            /// <returns></returns>
            public static T Unpack<T>(this byte[] data) where T : Packable
                => MemoryPackSerializer.Deserialize<T>(data);
        }
    Ответ написан
    1 комментарий