Я уже какое-то время занимаюсь программированием исключительно на Linux с C++. В моей текущей работе это магазин Windows с C# в качестве основного языка. Я переучился использовать Visual Studio вместо emacs (основная причина - встроенный отладчик в VC, помогает режим emacs в VC), настроить Cygwin (так как я не могу жить без оболочки) и освоить управляемый язык. Какие инструменты, книги, веб-сайт (помимо MSDN) или подводные камни, по вашему мнению, мне следует проверить, чтобы стать более эффективным кодировщиком Windows / C#?





Получите себе копию Решарпер. Это, вероятно, единственный лучший инструмент производительности для прямого программирования.
Поскольку вы уже умеете программировать на C++, обратите внимание:
Введение программистов в C# 2.0, Эрик Ганнерсон и Ник Винхолт
Хороший баланс между языковой справкой и общей информацией .net.
Так же: Essential .NET, том I: среда CLR Дон Бокс и Крис Селлс
Действительно интересная "секретная" нетбук (но написана для .net версии 1, поэтому может быть немного устаревшей).
О сборке мусора читайте в .Сеть. Люди, пришедшие из страны C++, привыкли к явному распределению и управлению памятью. В C# явного управления памятью практически не существует.
Еще одна тема, которую вы должны изучить, - это разница между универсальными шаблонами C# и шаблонами C++. Однако у меня нет хорошей ссылки для этого.
В зависимости от продукта, над которым вы работаете, вам, возможно, придется прибегнуть к вызову функций Win32 API из C#. Это делается с помощью P / Invoke, так что вы также можете немного прочитать об этом. И если вам действительно нужно его использовать, http://pinvoke.net - очень полезный набор объявлений C# для большинства API-интерфейсов Win32.
Вы также можете захотеть изучить хотя бы основы COM, поскольку очень часто приложения C# / .Net выбирают / нуждаются в повторном использовании компонентов от сторонних поставщиков, которые часто реализуются как компоненты COM. Однако COM - сложная тема. Мои любимые книги по COM и Essential COM от Дона Бокса и Professional DCOM Роджера Раймса. Я бы позаимствовал их из библиотеки, так как все, что вам нужно прочитать, - это несколько первых глав (если вы не хотите углубляться в подробности).
Если вы собираетесь писать клиентские приложения, необходимо базовое понимание окон, сообщений и очередей сообщений. Для этого вы будете использовать Winforms из WPF / XAML, и обе технологии хорошо справляются с выделением деталей от вас; однако, чтобы иметь возможность писать хороший код, вам нужно знать, что происходит за кулисами. Я не уверен, что для этого была бы хорошая книга, но в MSDN есть много информации.
Разве не должно быть основой CLR? И разве не важно, какой язык .NET используется? Если я просматриваю документы .NET, я могу решить, хочу ли я увидеть материал на VB.Net, C# или C++. Итак, если вы знаете C++, почему бы вам не использовать «управляемый C++»?
С уважением Фридрих
C++ / CLI - это НЕТ C++, хотя синтаксис практически такой же, и он вполне совместим на базовом уровне. Это совершенно новый язык. Он использует сборщик мусора для управляемого кода. Только неуправляемый код нужно обрабатывать вручную.
Я хорошо осведомлен об этом, но это C++, и получение GC, работающего с C++, - это не операция на мозге, либо просто возьмите Boehm-Weisser Gc.
Управляемый C++ существует в основном как промежуточный язык, где управляемый код должен взаимодействовать с устаревшим кодом C++. Насколько я знаю, не так много людей, которые предпочитают этот синтаксис C#.
Мой опыт был преимущественно C / Unix и Python с некоторым количеством java и пыльным VB6 2000 года выпуска, когда я впервые использовал C#. Я был знаком с управляемыми средами выполнения по работе, которую я проделал с Java, и API .Net имеют несколько схожий внешний вид с более ранними API MS.
Я нашел Pro C# и платформа .Net 2.0 Троельсена действительно хорошим ресурсом C# / .Net. Сейчас вышли более свежие издания.
Первое, что следует учитывать при переходе с C++ на C#, заключается в том, что они в основном имеют некоторый поверхностный синтаксис, но разница парадигм программирования становится все больше и больше по мере того, как вы углубляетесь в .Net.
Изучите основные парадигмы программирования C#, прежде чем начинать программировать, иначе вы можете попасть в ловушку написания программ C++ на C#, что, по большому счету, не лучшая идея. Наиболее важные вещи, к которым нужно привыкнуть:
Сначала начните с общей книги .Net, которая познакомит вас со всеми этими концепциями. Я рекомендую книгу, а не учебники и статьи в первую очередь, чтобы вы могли получить большая полная картина .Net в конце. Статьи в Интернете могут не достичь этого. Лучшая общая книга .Net, которую я читал:
Профессиональный C#, 3-е издание. - Саймон Робинсон, Кристиан Нагель, Карли Уотсон, Джей Глинн, Морган Скиннер, Билл Эвджен

Во-вторых, поскольку вы из C++ и привыкли работать близко к металлу и думать так, как работает оборудование (управление необработанной памятью (указатели, выделение памяти и т. д.), Я могу только рекомендовать одна книга это действительно будет демистифицировать, что такое .Net и что он делает:

Я не могу не подчеркнуть, насколько хорошо эта книга предназначена для каждого разработчика .Net, особенно если она пришла с C++ и в то же время является одной из лучших книг по .Net, которые я читал. Книга доставляет удовольствие читать и охватывает темы из:
Это мой лучший совет, который я мог бы подарить любому, кто хочет стать опытным разработчиком C# в кратчайшие сроки.
Посмотрите петцольд дотнет книга ноль. Это может помочь.
Не совсем так. Управляемый C++ по-прежнему остается C++, а IIRC C++ по умолчанию не имеет сборщика мусора.