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

    Nipheris
    @Nipheris Куратор тега C#
    Ответ написан
    Комментировать
  • Как правильно реализовать IEnumerable для обобщенного класса?

    Nipheris
    @Nipheris Куратор тега C#
    С параметром в к-ре ничего не получится, это ограничения языка, то что вы не можете потребовать от типа T конструктора с параметрами (можно только без параметров). Передавайте в ваш класс функцию-фабрику для значений/объектов типа T.

    И да, реализуйте прежде всего IEnumerable а не только IEnumerable.
    Ответ написан
  • Где найти уроки по созданию приложения под win на C# + .NET?

    Nipheris
    @Nipheris Куратор тега C#
    Не то ищите, разработку на Windows Forms или WPF погуглите.
    Ответ написан
    Комментировать
  • Верно ли утверждение, что если начать писать на С# придётся платить (например IDE, Unity или что-то другое)?

    Nipheris
    @Nipheris Куратор тега C#
    После того как MS многие ключевые компоненты дотнета перевело в опен-сорс (не все конечно, но гораздо лучше чем вообще ничего), платить нужно примерно за то же, что и везде - за продвинутые возможности IDE, которые помогают ВАМ заработать деньги. Если у вас работы больше чем на 5-10 разработчиков, и соотв-но это приносит вам достаточно денег чтобы им платить и себе оставлять, то платить за эти возможности вы будете с удовольствием - всё равно время спецов уж точно дороже.

    А если нет - то оно вам и не надо. В той же Community студии и дебаггер доступен, и уже даже профайлером можно пользоваться. Нет только всяких фишечек удобных когда нужно сэкономить дорогое время или задебажить противные трудновоспроизводимые баги. В любом случае, такого жёсткого vendor-lock как был лет 10 назад, когда с .net framework соперничал только Mono, сейчас уже нет.
    Ответ написан
    Комментировать
  • Где прописывать свои функции при работе с Windows Forms?

    Nipheris
    @Nipheris Куратор тега C#
    Вы должны его писать там, где ему место. Классы форм и класс Program - лишь одни из многих классов которые могут быть и должны быть в вашей программе.

    Ваш вопрос не имеет прямого отношения к Windows Forms, вам нужно изучать язык C# и то, как с его помощью решать задачи: как использовать классы, как оформлять алгоритмы и данные с их помощью и прочее. Сейчас вы теми немногими инструментами, которые понимаете и которые видите перед собой, пытаетесь решить задачу.

    Впрочем, если вам нужно прямо сейчас решить элементарную задачу из учебника и вышеуказанные вопросы вас пока не беспокоят, можете добавить метод в класс формы.
    Ответ написан
    Комментировать
  • System.AccessViolationException: "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."?

    Nipheris
    @Nipheris Куратор тега C++
    Начните с того что оттестируете код на C++ в обычном консольном приложении и убедитесь что он работает.
    Конкретно сейчас могу посоветовать правильно заполнить структуру STARTUPINFO
    Ответ написан
    2 комментария
  • Class libriry .Net. В чем разница?

    Nipheris
    @Nipheris Куратор тега C#
    1. .Net Framework и .Net Core - различные реализации интерфейсов и спецификаций, которые в народе и называют "дотнетом". Туда же - Mono.
    2.
    В чем разница, какую выбрать и одинаков ли на них код?

    Разница в доступных API. У каждой из реализаций свой набор стандартных классов, где-то больше, где-то меньше. .Net Standard - это как рази таки ОБЩИЙ стандарт доступных API. Будете разрабатывать под .Net Standard - ваша библиотека будет работать на всех реализациях которые его поддерживают. Обратите внимание что версий .Net Standard несколько - чем старше версия тем больше доступных API, но тем больше вероятность что некая версия некой реализации не поддерживает конкретную версию .Net Standard (если нужно подробнее - поищу ссылки).
    3.
    какую выбрать

    Выберете .Net Standard - сможете запустить везде, но не будут доступны API специфичные для конкретной реализации. Выберете .Net Framework - будут доступны все API классического Framework но портируемость может быть потеряна. Выбирайте .Net Standard пока не упрётесь (если вообще упретёсь) в то, что вам нужно API которое есть только в .Net Framework.

    То, что сказал freeExec про Standard не имеет ничего общего с реальностью, C++ и нативные dll тут не при чём.
    Ответ написан
    1 комментарий
  • Как работают проекты написанные на нескольких языках?

    Nipheris
    @Nipheris Куратор тега C++
    Вариант 1: P/Invoke.
    Вариант 2: C++/CLI.
    Вариант 3: отдельно работающий сервис на C++, выставляющий API по HTTP/Protobuf/ещё что-нибудь.
    Ответ написан
  • Как обрабатывать данные в wpf textbox, C#?

    Nipheris
    @Nipheris Куратор тега C#
    Вам нужна вьюмодель, к свойствам которой вы привяжете текстбоксы и команда, торчащая также из это вьюмодели, к которой вы привяжете кнопку. Читайте про MVVM, ICommand и биндинги в WPF.
    Ответ написан
    1 комментарий
  • Как уничтожаются объекты значимых типов?

    Nipheris
    @Nipheris Куратор тега C#
    1. В теории реализация не обязана использовать стек для хранения локальных объектов value-типов (см. https://blogs.msdn.microsoft.com/ericlippert/2009/... ).
    2. Тем не менее, в текущих реализациях используется именно стек, поэтому всё как и в остальных языках: https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D... .
    3. Помните, что значения value-типов иногда (не всегда) хранятся на стеке. Все значения value-типов, являющиеся частью объекта ссылочного типа (например, int-поле в классе или элементы массива double) рождаются и умирают вместе с этим объектом.

    Итого:
    • время жизни локальных объектов value-типов связывается с фреймом стека;
    • время жизни объектов value-типов, находящихся в составе объектов reference-типов, связывается с временем жизни объемлющего объекта;

    Более экзотические ситуации рассматривать не будем. И вообще, как говорит Липперт (см. ссылку), лучше не думать в терминах стека, т.к. это деталь реализации. Лучше говорить о времени жизни относительно вызываемых функций и относительно других объектов.
    Ответ написан
    1 комментарий
  • Docker: как запустить консольное Desktop приложение (exe)?

    Nipheris
    @Nipheris Куратор тега C#
    Но мне нужно докерезировать обычное Десктопное консольное приложение с .net framework 3.5+

    На Windows 7, очевидно, докер будет работать только благодаря линуксовой виртуалке (кажется в VirtualBox-e). Т.к. .NET Framework никогда не работал и скорее всего не будет работать под Linux (в отличие например от Mono или .NET Core), вы не добьётесь своей цели с использованием имеющихся инструментов.

    Вам как минимум нужны нативные контейнеры (Windows Containers), доступные в Windows 10 и Windows Server 2016.

    Вот кстати неплохой пример, как раз консольное приложение: https://github.com/Microsoft/dotnet-framework-dock... . Цитаты из него:
    To complete this sample you must have Windows 10 (or Windows Server 2016), Docker for Windows, Visual Studio, and Git installed.

    You must use Windows Containers on Docker for Windows to run this image. Be sure to check that you are properly switched to Windows Containers. Do this by opening the system tray up arrow and right clicking on the Docker whale icon for a popup menu. In the popup menu make sure you select 'Switch to Windows Containers'.
    Ответ написан
    Комментировать
  • WPF еще не умер?

    Nipheris
    @Nipheris Куратор тега C#
    WPF умер. C# на клиенте тоже умер. C++ и Qt на клиенте умер. Нативные приложения и приближенные к ним (WPF/WinForms) вообще умерли. Нативные приложения пишут только разработчики ОС, и то до тех пор пока не перепишут их на Электроне. Электрон скоро будет модулем ядра / драйвером для повышения производительности HTML-интерфейсов.

    Просыпаюсь в холодном поту
    Фух, это всего лишь сон.

    то используй DevExpress, а не WPF

    Это как понимать? Я знаю что у DevExpress есть наборы компонентов для разных UI-технологий, а чтобы у них было своё UI-решение, не базирующееся на чём-то вроде WPF/WinForms/HTML - не слышал.

    используй ASP.NET MVC, а не Silverlight

    Т.е. генерировать только статический UI только на сервере? Почему вы сравниваете Silverlight (который кстати и правда умер, уже точно) с ASP.NET MVC, а не с HTML или HTML + React например?
    Ответ написан
    21 комментарий
  • Какая разница между интерфейсами IEnumerable и IEnumerator?

    Nipheris
    @Nipheris Куратор тега C#
    Та сущность, по которой пробегают, должна реализовывать IEnumerable.
    Та сущность, которая пробегает, должна реализовывать IEnumerator (обычно это вложенный, нередко приватно объявленный класс).

    То что вы сказали я к сожалению не понял.
    Ответ написан
    Комментировать
  • Верно ли понимаю TPL и асинхронность?

    Nipheris
    @Nipheris Куратор тега C#
    1. Да, задача может исполниться где угодно. Более того, вы не поверите, но некоторые таски вообще могут нигде не исполняться, т.к. исполнять нечего (см. п. 5). Таск - это прежде всего абстракция значения, которое будет получено в будущем, и для получения которого возможно нужно что-то посчитать или просто подождать. См. futures and promises.
    2. Ну не обязательно в новом потоке, может быть выполнится и в существующем потоке если в пуле потоков есть свободный.
    3. Асинхронные операции ввода-вывода называются так потому, что выполняются через асинхронное API операционной системы. Нет никакого смысла использовать асинхронную операцию, но делать это в отдельном потоке созданном специально для этой операции. Потоки нужны прежде всего для того, чтобы эффективно нагружать исполнителей, т.е. процессоры (в том числе разные их ядра).
    4. Можно в новом, можно в потоке из пула. Так или иначе, если операция предполагает именно расчёты, а не ожидание ввода/вывода, то безусловно это тот случай, когда имеет смысл переложить нагрузку на другой поток.
    5. Если представлять таск как одну из сторон "трубы", по которой прилетит результат асинхронной операции, то Task - это принимающая сторона, а TaskCompletiotionSource - передающая (производящая результат) сторона. Когда вы создаёте таск из кода который нужно выполнить, этот код становится передающей стороной. Но Task абстрагирует любую асинхронную операцию, не только ту где нужно долго что-то считать. Возможно вам нужно дождаться одного байтика из сети, и операция будет считаться завершенной. Во всех тех случаях, когда вы хотите самостоятельно "произвести" результат для какого-то таска (а сам таск отдать "наружу" другому коду, например вернуть из функции), вы можете использовать TaskCompletionSource.
    (Кстати, в C++ принимающая сторона называется future, а передающая (производящая) - promise. В JS принимающая сторона называется Promise, а передатчиком является функтор).
    Ответ написан
    1 комментарий
  • Локальный клиент парсинга XML и обновления SQLite таблицы (C#). Возможно ли оптимизация?

    Nipheris
    @Nipheris Куратор тега C++
    Встал вопрос об оптимизации данного действия, потому как на обновление таблицы уходит минимум 2 минуты.

    Ну это известный прикол что по-умолчанию SQlite делает транзакцию на каждый insert. Запустите транзакцию и закоммитьте её один раз и все строки вставятся за секунду максимум.

    Вы начали выдумывать какие-то мегаспособы ускорения, не исследовав корень проблемы. А корень в том, что на транзакцию SQLite создаёт файл отката, и когда таки транзакций 40000, это будет столько же операций пересоздания файла. Это просто пздц какая тяжелая операция для файловой системы, и ни процессор ни многопоточность вообще не при чём. Могли бы догадаться сами, т.к. 40000 небольших записей это вообще не объём.

    Решение гуглится за 20 секунд и написано в FAQ по SQLite: www.sqlite.org/faq.html#q19
    Ответ написан
    Комментировать
  • Как сделать фиксированный столбец?

    Nipheris
    @Nipheris Куратор тега C#
    FrozenColumnCount - гуглится за 2 минуты. Или это не подходит?
    Ответ написан
    1 комментарий
  • Как считать значение из combobox?

    Nipheris
    @Nipheris Куратор тега C#
    Точный ответ зависит от того, как и с чем вы связывали комбобокс. Я обычно использую нормальные вьюмодельки для элементов комбобокса, поэтому привязываю SelectedItem. В случае использования биндингов вопрос считывания значения при выборе стоять не должен.
    Ответ написан