Задать вопрос
  • Чем конструктор отличается от метода?

    Конструктор - специальный метод, который призван создавать экземпляры класса или структуры. У него нет возвращаемого значения (неявный void).
    Дефолтный конструктор - конструктор без аргументов.

    Метод тоже может создавать новый экземпляр, но его нельзя вызвать через оператор new .... ().

    Условно:
    Конструктор - метод для создания экземпляра.
    Метод - это поведение созданных экземпляров.

    var a = new Constructor();
    a.Method();

    https://docs.microsoft.com/ru-ru/dotnet/csharp/pro...
    Ответ написан
    Комментировать
  • Изучил C#, написал пару своих проектов. Стоит ли переходить на С++?

    Если дело только в желании изучать, то норм, можно переходить на любой язык.
    Если дело в поиске работы, то лучше посмотреть вакансии, и решить что больше нравится.

    C# - это web и игры (unity3d).
    C++ не знаю.

    И прикол - сложность языка и з.п. на нем почти никак не связаны. (ИМХО)
    Ответ написан
    3 комментария
  • Ресурсы по изучение ASP.NET CORE?

    Я почти всегда по таким вопросам первым делом захожу на metanit.com.
    А так верно, если хочется не просто ознакомиться что там такого, то оф документация и курсы на https://docs.microsoft.com/ru-ru/learn/.
    Ответ написан
    Комментировать
  • Как отключить Alt+Tab C#?

    Блог - C# Disable CTRL-ALT-DEL, ALT-TAB, ALT-F4, Start Me...

    How to Suppress task switch keys (winkey, alt-tab,...

    Сайт для поиска сигнатур импорта - pinvoke.net

    Идея - импорт dll, и блокировка средствами Windows напрямую.
    Ответ написан
    Комментировать
  • Как вернуть нумерацию в C#?

    Для парсинга HTML можно воспользоваться этой статьей на Хабре - Распарсить HTML в .NET и выжить: анализ и сравнени....

    Когда вы распарсите HTML, тогда уже и сможете делать любые нужные вам запросы к ней.
    Ответ написан
    1 комментарий
  • Атака из "режима разработчика". Как защититься?

    Нет такой защиты, ее не существует.
    csrf тут не причем, никакой скрипт не пытается выполнится.

    F12 доступна всем, пользователь получил копию документа (HTML, CSS, JS), и может с ней сделать что угодно.
    Точно также он может посмотреть HTTP запрос, и отправлять туда что угодно не используя браузер.

    На хабре давным давно описывали проект, который защищает от подобного. Мол человек заходил из своего браузера в другой браузер, где нет F12, и уже там открывается сайт. Можете погуглить эту статью.

    Клиентский код выполняется и хранится на клиенте, клиент может с ним делать все что пожелает.
    Сервер должен проверять каждый запрос на валидность, не зависимо ни от чего. Любой запрос считается не правильным, если не доказано обратное.

    Посмотрите на Postman, Fiddler2, Burp. Это ПО специально для того что бы смотреть и изменять ответ-запрос.

    Посмотрел комменты к другим ответам.
    - Сервер не должен принимать стоимость товара полученные от клиента как действительную. Клиент получил копию цены, ее значение на момент запроса. Это просто информация для клиента, не для сервера. Только сервер знает текущую стоимость, клиент может запросить ее значение в определенный момент времени, и все.
    А вот что делать если клиент успел выполнить заказ по старой цене, а на сервере уже новая, это задача анализа (для аналитиков).

    Вам достаточно изучить код любого интернет магазина, как реализовано там. Книгу поискать где подобное приложение разбирается.
    Ответ написан
    Комментировать
  • В чем ошибка кода?

    Если вам нужно проверять запускается ли ваша программа единственный раз на ПК, то лучше использовать такой подход:

    public static void Main ()
    	{
    	    bool IsExist;
    	    using ( new Semaphore ( 0, 1, "MyAppUniqueString", out IsExist ) ) 
    		{
    		    if ( IsExist )
    			{ /* Этот поток создает ядро, другие копии программы не смогут запуститься. */ }
    		    else
    			{ /* Этот поток открывает существующее ядро с тем же именем.
    			        Ничего не делаем, ждем возвращения управления от метода Main, чтобы завершить вторую копию приложения. */  }
    }}
    Ответ написан
    Комментировать
  • C# EF SQL как сделать запрос?

    Через EF:
    1) Получить строки по условию из БД.
    2) Удалить полученные строки, вызвав метод Remove/RemoveRange на репозитории или как вы их получаете.
    Да - чтобы удалить нужно сначала загрузить, это ограничение чистого EF. Данные гоняются два раза.

    Через SQL:
    1) Пишем SQL скрипт.
    Минус - лучше избегать SQL при использовании EF, т.к. при переименовании свойств, таблиц - скрипты нужно будет искать и править отдельно. Их сложнее тестировать, изменять и т.п.

    Через расширение для EF:
    1) Пишем context.BulkDelete(customers, options => УСЛОВИЕ ) и все.
    Ищем аналоги https://entityframework-extensions.net/bulk-delete, есть бесплатные точно.
    В этом случае мы используем EF, не пишем SQL, при этом данные не гоняются дважды, код чище, понятней и т.п.
    Ответ написан
    5 комментариев
  • Как работать с временем (C#)?

    Мало данных.

    1) Что будет если к файлу не будет доступа?
    2) Что будет если на диске закончится место?
    3) Что будет если программу закроют, и ни о каких 20 минут не может быть и речи?
    4) Какую строку удалять если их там тысячи одинаковых?
    5) Что будет если через 20 минут файла уже не будет на диске?

    Чтобы удалить файл тем же процессом который его создал/обновил, он должен работать больше 20 минут.
    Если это невозможно, то нужно создавать другую программу, которая через 20 минут удалит из него нужный текст. А запускать ее джобой.

    Если речь о задачке для себя, то можно просто использовать Timer.
    В C# 4 типа таймеров, по линку выше они описаны.
    System.Timers.Timer
    System.Threading.Timer
    System.Windows.Forms.Timer
    System.Web.UI.Timer
    Ответ написан
  • Нужен совет: чему учиться,в какое направление идти?

    JS - быстро, работы в разы больше чем на любом другом языке. Проще изучить, проще найти первую работу.
    C# - долго, работы много. Изучать ощутимо сложнее чем JS.

    Я лично начинал с C#, потом подключил JS.

    ЗП - тут все сложно, "крутость" языка ничего не значит. Можно формочки клепать, условно за 100к (JS), а можно сложную логику мутить за те же 100к (C#). Все зависит от города, должности, компании, рынка, ваших умений торговаться. Но в целом на C# потолок будет выше (300-500+), чем просто JS. Но до потолка еще дойти нужно, а это много лет работы.
    Ответ написан
  • Как сделать генератор тестов ASC.NET C#?

    Проще самому сделать.

    class Question {
    List<Answer> Answers { get; set; }
    }
    
    class Answer {
    string Text;
    bool isValid;
    }


    На metanit.com/sharp/ читаем про Entity Framework, делаем приложение по шаблону сущности (создать, прочитать, удалить), и накидываем функционал. Можно найти видео как люди делают список книг или еще что-нибудь похожее, и переделать это под свое.
    Ответ написан
    Комментировать
  • Рисование и написание символов по трафарету. Как это работает?

    Если речь о мобильных клиентах, то простой путь - использование готовых фреймворков.
    1) Бегло читаем мануал по Unity3d.
    2) Смотрим видео по запросу "unity3d text animation".
    3) Смотрим видео как рисовать на экране - "Unity Mobile Dev from Scratch: Drawing on the Screen".

    Просто как 1, 2, 3. Только в сказке :)

    Т.к. задача больше похожа на желание сделать приложение, то лучше использовать готовые решения, где меню, звуки, анимация собираются как в конструкторе.
    Ответ написан
    Комментировать
  • Как изменить DTO в проекте?

    При изменении DTO миграции не будет, как вы правильно заметили, это не изменяет entity.
    Entity маппится на БД (атрибуты или fluent annotations), и ее изменения уже требуют миграции.
    Entity также маппится на DTO, при помощи разных способов, руками или фреймворками (вроде AutoMapper).

    Получается что вы забыли прописать новое поле в маппинг Entity -> DTO. Раз оно не подхватилось автоматически, значит имя поля DTO отличается от имени поля в Entity или маппинг ручной там.
    Ответ написан
    Комментировать
  • C#. Какие библиотеки использовать для распознавания текста?

    Я давно делал подобное.

    Из заметок:
    - AForgeNet — библиотеки компьютерного зрения и искусственного интеллекта;
    - Tesseract — программа для распознавания текстов;
    - Fanndotnetwrapper — обертка .NET нейросети FANN;
    - алгоритм поиска связанности CCLA от Omar Gameel Salem. (поиск ближайших соседей, как определять буквы, и отделять их друг от друга).

    Есть уже ML .NET - https://github.com/dotnet/machinelearning-samples

    У вас картинка идеальная, можно сказать тут и онлайн бесплатные распозновалки отработают на 100%.

    Готовые решения думаю гуглятся, помоему даже в AForgeNet есть). - https://www.codeproject.com/Articles/11285/Neural-...

    Компьютерное зрение, готовое API - https://azure.microsoft.com/ru-ru/services/cogniti...

    Но да, первый раз сложно доходит, но как только один раз заведете это дело, то потом уже в разы проще будет.
    Ответ написан
    1 комментарий
  • Как набрать опыту начинающему C# программисту?

    Делать сайты на подобие этого - https://chsakell.com/2015/08/23/building-single-pa...
    Только на новом JS фрейворке.

    Попробуйте выполнить тестовые задания которые выдают, их можно найти в сети.
    1) Сделать сайт бронирования билетов на ХХХ.
    2) Сделать WCF сервер-клиент приложение чат или что то подобное.
    3) Сделать аналог соц сети, с минимум функционала.

    Пройти курс https://programmingwithmosh.com/become-a-full-stac... (скачать можно). Тут с нуля до норм приложения.
    Много другого на https://programmingwithmosh.com/courses/

    После этого спокойно джуном возьмут в большинство компаний.
    Ответ написан
  • Как открыть dll файл как текст в c#?

    Самый простой и удобный способ, если изменений много или они не простые.
    Качаем бесплатный dotpeek.
    Открываем в нем dll или exe как проект (будут сгенерированы файлы проекта).
    Редактируем и компилируем снова, но уже с внесенными изменениями.

    Если хочется без перекомпила, то тут много других утилит, названия забыл уже, но их много.
    Ответ написан
    Комментировать
  • Как лучше: выучить с# или сразу с# под Unity?

    1) Сам язык. ITVDN (курсы), Metanit (сайт справочник).
    2) Unity3D. ITVDN (курсы), YouTube, Книги.

    Сразу работать с двумя неизвестными сложнее, чем изучать их по одному.
    В Unity своих прибомбасов полно, но лучше вникать в них, когда C# воспринимается легко.

    Если взять время изучения до желаемого уровня взять за 100%, то лучше сначала получить первые 50%, а затем вторые 50%. Потому что вторые зависят от первых. Сложно держать в голове две неизвестных, тесно связанных между собой.

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

    Для работы с аудио есть ответ - Trim an Audio File(.wav,.mp3)

    Сложнее всего это - "чтобы было понятно на каком слове файл закончился и начался". Тут уже распознавание речи.
    Или резать на ближайшей тишине по заданному участку, или реально разбирать на слова, с указанием start/end position для каждого слова в звуковом потоке.

    Если в записи тишина и голос, то по тишине резать.
    Если есть фоновый шум, музыка и что угодно другое, но не слова, то сложнее.

    Распознавать можно не весь кусок а до первого слова в начале куска и в конце.

    Вопрос с ответом по распознаванию - Voice/Speech to text.
    Ответ написан
    Комментировать
  • Какие книги можно прочитать про C#(глубокое изучение)?

    Книги по C# достаточно 1-2.
    Рихтер + Джон Скит.

    Остальное все равно забудется.
    Я прочитал около 5 книг именно по C#, и рад если помню ~ 10%.

    Быстро освоить боевое "нужно" - достаточно сайта https://metanit.com/sharp/
    Ответ написан
    Комментировать
  • Есть ли смысл инкапсулировать обработку исключительных ситуаций, вынося код из контроллера в метод сущности?

    1) Контроллер - связывает UI и логику, но это не сама логика, максимум тут подготовка модели к дальнейшей передаче. GRASP - Контроллер.
    2) Логику по получению, маппингу и т.п. переносим в сервис. SomeModelService например.
    3) Repository - просто коллекция, никаких not_found там нет.
    4) Данный сценарий как я понял обновляет существующую сущность. Значит вероятно следует добавить проверку на конкуретный доступ, оптимистический, т.к. это веб. Т.е. пусть в SomeModel будет значение версии, дата или int или что вам удобно. И хендлинг всех возможных ситуаций делайте не в контроллере а в сервисе. Т.к. UI может добавится другой.
    5) Вместо конкретных репозиториев и сервисов используйте интерфейсы. SOLID, буква D. Это позволит легко тестировать приложение, и разрабатывать модули не ожидая все другие модули, которые вы используете.

    Но если приложение простое, или учебное, то можно просто забить на все это, т.к. оверхед большой, и пилить как удобно. В таком случае разницы между 1 и 2 способ не много, но 1-ый чище.
    Примеры всяких GetOrXXX хорошо подсмотреть у C# LINQ. FirstOrDefault и т.п.
    Ответ написан