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

    Nipheris
    @Nipheris Куратор тега C#
    Работаю

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

    Nipheris
    @Nipheris Куратор тега C#
    Курсирует инфа, что программа написанная на VS 2015 не запуститься на XP и что под XP максимум NET 4.5 можно установить

    Не знаю, где она у вас там "курсирует", но под XP максимум устанавливается фреймворк 4.0. Это все на MSDN находится без проблем, тестируется на виртуалке для надежности.

    а современный 6-ой C# уже под версию 4.6

    Сейчас я вам фокус покажу. Создаем консольный проект на C#. Используем пару фич из C# 6.0:
    namespace ConsoleApplication1
    {
    	class A
    	{
    		public int Test { get; set; } = 0;
    	}
    
    	class Program
    	{
    		static void Main(string[] args)
    		{
    			Console.WriteLine(nameof(Main));
    		}
    	}
    }


    Далее ретаргетим проект на .Net Framework 2.0:
    67e06871538647a4a5e956d452298976.png
    Удаляем сборки и using-и, недоступные во втором фреймворке (для второго это LINQ и TPL).
    Компилим, запускаем, и радуемся.

    Выводы:
    1) под XP доступны все дотнеты до 4.0 включительно
    2) версия фреймворка определяет фичи, доступные в "стандартной библиотеке", а не фичи языка. Замечу, что в 4.0 есть и LINQ и Tasks;
    3) разрядность имеет значение, если ваша программа или зависимые библиотеки компилятся НЕ в AnyCPU. Иначе разницы нет.
    4) с SQL сервером вообще отдельная история, не знаю при чем тут вообще .Net. Это у вас наверное мнение такое о стеке MS, что у него все туго вместе завязано и не развязывается. Это не так. Меньше слушайте бестолковых коллег, больше читайте MSDN. Поверьте, после 3-х и более лет разработки под дотнет вы все вышеуказанное расскажете наизусть даже если вас разбудить в 3 часа ночи.

    корпоративное приложение тогда нужно использовать сервер БД в локальной сети

    конечно, Express версия это вам для примера, чтобы можно было создать и запустить, например, веб-приложение. Почитайте про ADO.NET, это подсистема работы с реляционными СУБД, и все поймете.
    Ответ написан
    2 комментария
  • Как защититься от sql иньекции?

    Nipheris
    @Nipheris Куратор тега C#
    с помощью класса SqlParametrs можно защититься от sql иньекции?

    Можно и нужно. При использовании параметров и prepared statements значения для конкретного запроса могут передаваться вообще отдельно от синтаксиса запроса. В любом случае, за корректность будет отвечать драйвер конкретной СУБД, а не вы.
    Ответ написан
    Комментировать
  • Как получить доступ к MenuItem в ContextMenu?

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

    В codebehind конечно делать можно, но не нужно. Вы могли бы сделать нормальную viewmodel с четырьмя свойствами, соответствующими пунктам вашего меню и режимам, которые вы переключаете. После этого вы просто привязываете IsChecked каждого пункта меню к каждому свойству вьюмодели. А уже в ней вы реализуете логику, что если выбран один пункт, т.е. некоторое свойство из 4-х имеющихся проставлено в true, то вы снимаете true со всех остальных. Разумеется, чтобы привязка получила нужные уведомления, вы должны реализовать INotifyPropertyChanged.
    Если вышесказанное для вас туманно, то я могу посоветовать что почитать, т.к. ваше решение далековато от основных идей WPF и MVVM :)
    Ответ написан
    1 комментарий
  • Что должен знать junior С#?

    Nipheris
    @Nipheris Куратор тега C#
    корпоративные приложения

    Поучите голый ADO.NET и какую-нибудь ORM-ку, да хотя бы EF. Еще можете хотя бы начать ASP.NET, вероятность попасть на него на первой работе достаточно высокая.

    финансы, банковская сфера

    Подтяните теорию по реляционным БД. Ведь какие финансы без транзакций!) Вы должны хотя бы знать о таких понятиях, как изоляция транзакций, представлять в общих чертах как на SQL можно сделать какую-нибудь выборку с агренированием. Никто конечно в здравом уме не даст джуниору непосредственный доступ к сколь-либо значащим данным, отражающим реальные денежные балансы, но ваша осведомленность пойдет вам на пользу, иначе рискуете клепать интерфейсики ближайшие несколько лет. А, ну да, выясните, почему нельзя вот так считать проценты по кредиту:
    float interestRate = 0.13 // ставка
    float interestSum = interestRate * sum;


    геймдев

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

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

    Nipheris
    @Nipheris Куратор тега C#
    Если свойство один-к-одному соответствует полю-хранилищу, тогда можно и короткое, не забудьте только правильно доступ проставить (можно отдельно для get и set). Если из одного поля берут значения сразу несколько свойств, то у вас нет выбора).

    Еще удобно использовать именно приватное поле, если у свойства ленивая инициализация.
    Ответ написан
    Комментировать
  • Почему не изменяется версия библиотеки в Visual studio?

    Nipheris
    @Nipheris Куратор тега C#
    > с более поздней версией
    ну тогда уж с более ранней

    > Проверяю версию добавляемой библиотеки перед тем как добавить
    Добавляете из какого списка? Browse?

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

    Кстати, а в NuGet этой либы нету?
    Ответ написан
    4 комментария
  • Обновление wpf приложения?

    Nipheris
    @Nipheris Куратор тега C#
    MSI-пакеты тоже вариант, если проект большой и нужны широкие возможности.
    Ответ написан
    Комментировать
  • Потерялись все ссылки при переносе проекта на другой комп C# .NET?

    Nipheris
    @Nipheris Куратор тега C#
    Еще лучшее решение - использовать NuGet, насколько возможно. Если всех нужных пакетов в нем нет - тогда можно пути записать в переменную вроде $(LibraryRoot), и подключать props-файл к проекту - тогда этот файл может быть на каждом компе свой.
    Ответ написан
    Комментировать
  • Где взять документацию по NuGet на русском?

    Nipheris
    @Nipheris Куратор тега C#
    Что такое NuGet?

    Менеджер пакетов, изначально ориентированный на .Net, но в данный момент и с некоторой поддержкой нативных библиотек под Винду.

    Дружит ли он с SharpDevelop?

    Он достаточно самостоятелен, SharpDevelop давно не открывал, возможно нужно будет пользоваться командной строкой.

    Где найти информацию по нему?

    На оф. сайте и в нормальных книгах по .Net.

    как добавить в solution/ project библиотеку без использования NuGet?

    Add Reference и выбирайте нужную сборку, все так раньше и делали.

    В английском я не силен.

    Вот займитесь лучше английским. НюГет сегодня есть, а завтра нет, а вот английский просто так с мировой арены не сойдет.
    Ответ написан
    Комментировать
  • Какой язык лучше для управления памятью С++\С#(ручное управления или автоматическое)?

    Nipheris
    @Nipheris Куратор тега C++
    C++ разумеется, может быть даже Си, в C# низкоуровневостью и не пахнет
    Ответ написан
    7 комментариев
  • Правильная разработка программного обеспечения!?

    Nipheris
    @Nipheris Куратор тега C#
    "Нормально ли создавать в каждом классе куча экземпляров других классов?", "Не режет ли потом данная программа по производительности ПК с такими количеством уровнями классов?"


    А вы поймите, что если вас беспокоит приведеннный вами код, вам надо не о сколько о классах думать, и не о производительности, сколько о функциях и методах. Зелим Бельтоев уже хорошо намекнул вам об этом, я скажу еще раз словами: то, что ОБЪЕКТОВ много и между ними сложные связи - это НОРМАЛЬНО. Самое главное, что у вы должны уметь ограничивать - сложность и объем связей в КОНКРЕТНОМ участке кода. Пока вы понимаете, ЧТО у вас написано в конкретном методе, и КАК это себя ведет (причем, это понимание не расходится с рельностью) - вы все делаете правильно. Это важнейший критерий. Производительность это тоже фактор, но я даже не могу себе представить, насколько сложную структуру классов нужно изобрести, чтобы она реально мешала тому же CLR исполнять код. Реально узкие места по пр-ти возникают в алгоритмах с высокой алгоритмической сложностью, таких мест обычно мало (если они вообще есть, в бизнес-приложениях в 99% случаев все упирается в IO, или в необходимость побольше кэшировать на клиенте), и они целенаправленно оптимизируются.
    Ответ написан
    8 комментариев
  • Как определить цвет пикселя на форме?

    Nipheris
    @Nipheris Куратор тега C#
    1) если хотите проверить, что кликнули на фигуру - лучше сделайте это с помощью уравнения эллипса;
    2) если все-таки нужен цвет пикселя - лучше делайте всю отрисовку в отдельный Bitmap, его потом выводите на форму (с помощью контрола Image, например), и ИЗ НЕГО потом считывайте цвет при клике по контролу. Так будет меньше сюрпризов, чем заморачиваться с экраном;
    3) внимательно следите, относительно чего считаются координаты, с которыми вы работаете - относительно угла экрана, формы или клиентской области формы.
    Ответ написан
  • Книги по Workflow по работе C# winforms?

    Nipheris
    @Nipheris Куратор тега C#
    Mark Collins - Beginning WF смотрели? Там вроде нет особой разницы под WinForms или WPF
    Ответ написан
    Комментировать
  • Как исправить постоянную ошибку с MaxReceivedMessageSize в NetTcpBinding?

    Nipheris
    @Nipheris Куратор тега C#
    > То есть за все запуски программы оно накапливается.
    Это было бы крайне странно, маловероятно, что причина в этом. Есть возможность собрать трафик сниффером и посмотреть, какая длина последнего успешно принятого сообщения, а какая - у первого выброшенного?
    Ответ написан
  • Почему происходит зависание формы и таймеров windwos forms?

    Nipheris
    @Nipheris Куратор тега C#
    Работать с UI, то есть с формами и контролами, из потока, НЕ породившего эту форму/контрол - очень плохая практика, которая рано или поздно приводит к таким проблемам, как ваша. Кроме того, она еще и усложняет отладку.

    Вне зависимости от того, какие у вас там вычисления, выполняйте их отдельно, складывайте результат в массив/Bitmap, а уже в UI-потоке по таймеру регулярно считывайте рассчитанные данные и отображайте в PictureBox.

    Даже если проблема не исчезнет, вам будет проще определить, где происходит зависание. Сейчас это может быть по куче различных причин. Повторюсь: то, что вы лочите pictureBox это не решение проблемы - в WinAPI НЕЛЬЗЯ работать с UI напрямую из другого потока, а WinForms это не более чем обертка над стандартными контролами.
    Ответ написан
    Комментировать
  • Как захостить WCF на консоль так, чтоб служба была доступна в локальной сети?

    Nipheris
    @Nipheris Куратор тега C#
    консольное (WinForms)

    Это должно быть через слеш.

    99% что проблема в том, что ваша служба слушает на локалхосте, а не на реальном интерфейсе или на 0.0.0.0. В зависимости от того, как вы ее хостите, где-то (в коде или конфиге) у вас должен быть указан адрес для прослушивания. Если он 127.0.0.1 или localhost - вам нужно заменить его на адрес сетевого интерфейса, где запущена служба. Или слушать на всех интерфейсах сразу, тогда урл будет вида http://+:порт/ - причем если у вас http, то для запуска вам понадобятся права администратора (т.к. сервис будет регаться в системном обработчике http.sys).

    По большому счету вопрос не про WCF, а про запуск сетевой службы в принципе. Апач или IIS вам тоже ничего не будут отвечать по сети, если попросить их слушать на localhost.
    Ответ написан
    6 комментариев
  • Какая разница в асинхронных методах?

    Nipheris
    @Nipheris Куратор тега C#
    Разница в том, что await можно использовать только в async-методе, и его использование подразумевает, что компилятор превратит метод в сопрограмму, и в том месте, где стоит await, его выполнение можно будет приостановить и переключиться на что-то еще.

    Использование Result остановит ваш поток до тех пор, пока таск не завершится и не вернет результат. Но Result можно использовать и в обыкновенном методе, не только async (в async методе его использовать абсолютно бессмысленно).

    Кроме того, использование Result влечет за собой неочевидные эффекты в виде возможности дедлоков и усложняет обработку исключений (т.к. Result всегда кидает AggreagteException, в который оборачивается исключение, брошенное внутри таска), подробнее смотрите тут stackoverflow.com/questions/24623120/await-on-a-co...

    Как первый ответ отвечает на ваш вопрос я не понимаю)
    Ответ написан
    6 комментариев
  • Как конвертировать точечный массив в числовой в c#?

    Nipheris
    @Nipheris Куратор тега C#
    System.Drawing.Point[] points = ...
    float[,] data = new float[points.Length, 3];
    for (int i = 0; i < points.Length; i++)
    {
    	data[i, 0] = points[i].X;
    	data[i, 1] = points[i].Y;
    	data[i, 2] = 0.0f;
    }
    Ответ написан
    7 комментариев