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

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

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

    Тупой пример с координатами персонажа... делаешь эти переменные приватными, и оформляешь методы 'бег вперед', 'поворот' и т.п. а значит снаружи у тебя не будет чего то типа object.pos_x+=object.speed_x а будет object.moveRight().
    Ответ написан
    Комментировать
  • Как выполнить поиск по зашифрованому контенту?

    @rPman
    Есть ещё третий вариант - гомоморфное шифрование. Когда возможны операции над зашифрованным контентом, результат будет так же зашифрованный, и чтобы его прочитать его нужно расшифровать.

    Гугли, есть библиотеки и даже расширение postgres (очень старое, не факт что поддерживается).

    С практической точки зрения польза сомнительна. Ресурсов алгоритм жрет непомерно много и использовать его имеет смысл только если альтернативы в принципе нет.
    Ответ написан
    Комментировать
  • Здравствуйте! Пытаюсь перезаписать файл, но в результате файл пустой. Как я могу это исправить?

    @rPman
    Очень странно, код у автора выглядит верным.
    Точно никаких ошибок выполнения не происходит? Оберни весь код в try catch и выводи exception
    у меня есть смутные подозрения - русские имена в пути и наличие в них onedrive, так как включенное облачное хранилище может делать с файлами в каталоге свою магию. Проверь работу с файлом в другом месте

    Одно время активно пользовался именно этим способом, потому что нужно было автоматизировать работу с чужими документами с формулами, и за адекватное время и усилия делать все можно было только средствами офиса, и именно так все делали из c# (vbs никто не любил хотя благодаря автозаписи макросов, написание кода часто было еще проще).
    Ответ написан
  • Возможно ли на винде написать программу дешифровки?

    @rPman
    Для начала, именно такой функционал уже встроен в операционную систему - штатное шифрование ntfs, доступ к файлам открывается при авторизации пользователем (можно воспользоваться run as ...), из под которого было произведено шифрование. При этом дешифрация происходит исключительно на момент чтения и записи файлов, сами файлы на диске остаются зашифрованными, это происходит прозрачно и автоматически.

    Всю систему шифруют не на уровне файлов а на уровне диска, пароль будет запрошен при старте системы (точнее при монтировании диска) штатный инструментарий windows или сторонние типа veracrypt
    Ответ написан
    Комментировать
  • Возможно чтобы код С# испольнялся на GPU?

    @rPman
    Погуглю за тебя.
    ilgpu.net, первый же пример.

    Возможно ты что то не то хочешь, и лучше бы тебе сначала посмотреть в сторону opencl, язык там будет похожий на c++, заточен на работу на многопроцессорных ускорителях типа видеокарта. Есть даже реализации для fpga чипов с программируемой логикой, в общем это специализированный стандарт.

    Есть еще cuda, это vendorlock модификация opencl от nvidia (формально это они двигают стандарты в этом направлении, ибо крупнейшие разработчики железа)
    Ответ написан
    Комментировать
  • Как сделать чтобы приложение для win ce открывалось на весь экран?

    @rPman
    Явно причина в неправильном закрытии explorer. Его автозапуск нужно убирать из реестра, заменой шела на ваше приложение.
    https://developer.toradex.com/windows-ce/knowledge...

    Путь указывать полный

    p.s. еще если это WinForm то у формы можно задать TopMost свойство true, но надо экспериментировать.
    Ответ написан
    Комментировать
  • Как реализовать смену цвета кнопки в разных файлах (c# winforms)?

    @rPman
    Так и говори, как из одной формы обращаться к контролам другой (утт форма - это окно, в твоем вопросе это 'файл' Tema1.cs и t1q1.cs).

    Тебе нужно передать ссылку на форму, в которой что то хочешь изменить на форму, которая хочет изменить. Сделать это можно либо в тот момент, когда вторая форма создается, либо (если экземпляр у формы один) разместить эту ссылку как статичный мембер какого либо класса (пусть и самой формы) в которую конструктор будет иницилизировать эту ссылку, типа так
    public static tema1_form;
    ...
    // конструктор Tema1
    Tema1()
    {
    ...
    Tema1::tema1_form=this;
    ...
    }

    // в другом файле
    Tema1::tema1_form.button1.BackColor=Color.LightBlue;
    формально способов тьма, тебе тут могут еще накидать, а то народ 'почему то' не любит в конкретных задачах такие простые способы.
    Ответ написан
    Комментировать
  • Как программным методом удалить одну из итераций цикла for?

    @rPman
    в твоем случае просто - делать i--, само собой, если условие пропуска содержит учет номера шага, то для этого завести дополнительный счетчик настоящих шагов

    Если что под твою задачу лучше делать цикл while и считать количество 'новых слов' а не количество шагов, зачем тебе эти шаги
    Ответ написан
    Комментировать
  • Как вывести double число c определенным числом знаков ДО ЗАПЯТОЙ и После в сумме?

    @rPman
    Преобразовываешь в строку toString и берешь первые n символов подстроки Substring

    p.s.
    идеально выровненные числа вывести
    это отвратительно выровненные числа, пользоваться этим будет невозможно

    правильно выравнивать числа по правой стороне, зафиксировав количество знаков после запятой (что бы разделительная точка была на одной линии
    1 322.0000
      133.4400
       12.4440
        0.3333
    Ответ написан
    Комментировать
  • Как включить бд в exe и как ей потом пользоватся?

    @rPman
    Нужно решение, умеющее работать с базой данных в ресурсах exe-файла (я таких не знаю) или в оперативной памяти, в этом случае при запуске программы базу можно загрузить в память из ресурсов (где она хранится в виде просто набора байт без типа)

    sqlite умеет открывать базу данных в оперативной памяти, соответственно храни дамп своей базы в ресурсах, вот пример на c++ как импортировать и экспортировать memory базу данных, правда он с файлом, но как я понимаю проблем тут не будет работать с техническими потоками на оперативной памяти с помощью Application.GetResourceStream
    Ответ написан
    Комментировать
  • Как написать программу для решения уравнения на C#?

    @rPman
    Зачитываешь данную формулу буквально, функция равна тому то если выполняется такое условие, иначе равно другому если другое условие... максимально подробно, не упуская ни одного момента.

    Затем практически каждое слово можно перевести в программу (можешь промежуточно алгоритм нарисовать если тебе так удобнее)

    p.s. табулирование функции (блин кто придумал это, мне пришлось гуглить, за всю жизнь я это не слышал) - это нужно выдать значения функции на заданном интервале входного параметра, это можно циклом for сделать. В задаче не сказано как определяется этот интервал и шаг, поэтому забей любые разумные значения в коде константами.

    p.p.s. формулу то хоть читать умеешь?
    Ответ написан
    5 комментариев
  • Как десериализовать простой Json в массив?

    @rPman
    Вот так не работает?
    Newtonsoft.Json.JsonConvert.DeserializeObject<List<MyClassWithCode>>(строка_с_json)


    upd. тут тебе нужен потоковый парсер, используй JsonTextReader, он будет выдавать тебе в цикле по одному токену, и тебе достаточно закодировать логику, учитывая по ходу на каком уровне находится твой декодер либо надеяться на то что структура json всегда верная и не требует валидации

    int[] собирай уже сам

    в этом случае ты сможешь обрабатывать огромный json файл массив последовательно
    тут пример как вручную не следить за объектом в процессе
    Ответ написан
    4 комментария
  • Как сделать так чтоб хвост змейки двигался по направлению головы winforms C#?

    @rPman
    Если у тебя змейка максимально примитивная, где поле клетка одного цвета (фон) и змея - клетка другого цвета (речь не о цвете а о том что клетки змеи неразличимы), то алгоритм сводится к тому чтобы как то хранить все квадраты змеи для того чтобы знать, в каком порядке их удалять.

    Способов хранения миллион, самый тупой - массив пар x,y, но не массивом а списком (чтобы эффективно удалять хвост и добавлять новую голову), с каждым шагом ты добавляешь (конец списка) точку головы и тут же удаляешь точку хвоста (начало списка)... при удалении рисуешь квадрат на экране фоном, а при добавлении - цветом змеи.
    Этот алгоритм не требует перерисовку змеи полностью да и вообще весь экран... даже не нужно хранить информацию о клетках где то дополнительно, так как чтобы положить яблоко будет достаточно хранить в другом массиве список координат яблок.

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

    @rPman
    Для упрощения администрирования и защиты сервисов в рабочей сети общепринятая практика - собирать их все в локальной сети (при необходимости объединенной по интернету с помощью vpn), потому как иначе либо каждый сервис должен уметь защищаться от атак (напоминаю, шифрование не спасет от ддоса) либо в каждом участке сети настраивать фаервол.
    Ответ написан
    Комментировать
  • Как в линукс проверить, запущено ли net приложение?

    @rPman
    Нет нужды создавать mutex или semaphore, исторически, хоть в windows хоть в linux для этого открывают файл (пустой, их называют .lock) в режиме SharedAccess NONE
    https://learn.microsoft.com/ru-ru/dotnet/api/syste...
    https://learn.microsoft.com/ru-ru/dotnet/api/syste...
    FileMode = Create тогда файл будет автоматически создан если отсутствует и не выдаст ошибки если уже есть
    FileAccess = Write чтобы файл можно было создать (если создать его заранее то хватит Read)
    SharedAccess = None запрет на повторное открытие хоть на чтение хоть на запись


    При попытке открыть такой файл повторно, будет выдана ошибка, при этом при закрытии процесса, операционная система следит за закрытием файлов автоматически.
    Ответ написан
    Комментировать
  • Какой самый лучший способ передать информацию между формами?

    @rPman
    Где то должна лежать доступной для формы-источника ссылка на форму получателя.

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

    Иначе, оформлять сам процесс коммуникаций в виде отдельного класса (а там в зависимости от цели организации этого посредника, либо по классу на вид коммуникаций либо общий для всех сообщений и способов выбора от кого и кому)
    Ответ написан
  • Возможно ли запускать программы (.exe) на самописной OS Cosmos OS?

    @rPman
    Да, самый популярный инструмент - wine.

    С вас самый минимум (сарказм) - собрать (скомпилировать) этого монстра под вашу ОС и архитектуру железа, для этого она должна быть как минимум posix совместимой и на ней должен быть как минимум компилятор gcc (с его помощью можно будет собрать остальные инструменты, нужные для сборки wine)

    p.s. пример обратного механизма, запуск linux приложений в windows - wsl (его первая версия, так как вторая - это фактически виртуальная машина)

    p.p.s. когда то очень давно, во времена os/2 и появления winnt4, в windows был встроенный механизм поддержки и приложений из unix операционных систем но был старательно уничтожен майкрософтом во имя зла и монополии (в те времена к примеру win32 запускались в os/2 нативно)
    Ответ написан
  • Как ввести логин в окно входа в Steam?

    @rPman
    Потому что твой xpath явно неверный (ты не указал весь код)
    <input type="text" class="newlogindialog_TextInput_2eKVn" value="">
    ...
    <input type="password" class="newlogindialog_TextInput_2eKVn" value="">

    Правильно - ищешь все input без фильтра и каждый проверяешь на подстроку в названии класса и значение type, еще можно искать по координатам, запрашивая у каждого getBoundingClientRect, пропуская заодно с нулевым размером
    Ответ написан
  • Как сделать кликер на C#?

    @rPman
    Кажется я уже отвечал на этот вопрос
    c# - худший выбор для данной задачи, так как все придется делать через win32, лучшим выбором тут будет c++ или c

    И да, с некоторыми шансами это не поможет.

    p.s. с высокой вероятностью симуляция кликов через SendMessage с майкрософтовским файловым эксплорером не сработает, там такой п..ц наворочен, когда то давно давно я ковырялся в нем со spy++. С другой стороны, в win11 его полностью переписали, может стало легче?
    Ответ написан
    Комментировать
  • Как сделать клик без перемещения курсора в неактивном окне программы?

    @rPman
    Анализируешь окно приложения на состав win32 окон ( там может быть сложная иерархия, вплоть по контрола или одно основное, а интерфейс рисуется) с помощью штатной утилиты microsoft visual studio spy++, затем в программе ищешь по выявлненным свойствам окно FindWindow и шлёшь сообщение с помощью SendMessage. С помощью spy++ можно проанализировать какие именно сообщения приходят при клике.

    P.s. Для directx приложений это не сработает
    Ответ написан
    Комментировать