Программист Linux/С++ для программиста на С#/Windows

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

Ответы

Ответ 1

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

Познакомьтесь с основными парадигмами программирования на С# перед тем, как начинать программировать, иначе вы можете попасть в ловушку написания C++ программ на С#, что далеко не лучшая идея на долгое время. Наиболее важные вещи, к которым нужно привыкнуть:

  • Автоматическое управление памятью и сборка мусора, включая шаблон удаления. Изучите основы и подводные камни.
  • Что такое классы, интерфейсы, структуры и примитивы в .Net, и как они ведут себя по сравнению с C++.
  • События, делегаты, свойства, лямбда-выражения - все это несколько новые концепции, взятые из C++.
  • .Net дженерики и различия между шаблонами.
  • Строки, массивы, пользовательские атрибуты, отражения, исключения и основы потоков в .Net, все они интенсивно используются повсеместно в .Net, и вы должны изучить их тонкости, чтобы эффективно их использовать.
  • Программирование GUI в Winforms и ASP.Net (и, возможно, после там WPF), компоненты, управление, привязка данных. Модель .Net GUI.

Сначала начните с общей книги .Net, которая знакомит вас со всеми этими концепциями. Прежде всего, я рекомендую книгу по чтению учебников и статей, чтобы в конце вы могли получить полную полную картину .Net. Статьи в интернете могут этого не достичь. Лучшая общая книга .Net, которую я прочитал:

Professional С#, 3-е издание. Саймон Робинсон, Кристиан Нагель, Карли Уотсон, Джей Глинн, Морган Скиннер, Билл Эвджен

Professional C#, 3rd edition, ISBN: 978-0-7645-5759-0

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

CLR Via С# от Джеффри Рихтера

CLR via C#, Second Edition ISBN 9780735621633

Я не могу не подчеркнуть, насколько хороша эта книга для каждого разработчика .Net, особенно когда он из C++ и в то же время является одной из лучших книг .Net, которые я читал. Книгу приятно читать и она охватывает темы из:

  • Модель выполнения .Net (от MSIL до нативного кода)
  • Управление памятью (как среда выполнения .net и сборщик мусора управляют памятью, компоновкой кучи, поколениями памяти, финализацией, кучей больших объектов)
  • Типы проектирования
  • Загрузка сборки, отражение, домены приложения
  • и многое другое...

Это мой лучший совет, который я мог бы дать любому по пути стать опытным разработчиком С# в кратчайшие сроки.

Ответ 2

Поскольку вы уже знаете, как программировать на С++, проверьте:

Программисты Введение в С# 2.0, Эрик Гуннерсон и Ник Венхольт

Хороший баланс между ссылкой на язык и общей информацией .net.

Аналогично: Essential.NET, том I: обычная среда исполнения от Don Box и Chris Sells

Действительно интересная "под обложками" чистая книга (но написанная для .net версии 1, поэтому может быть немного устаревшей).

Ответ 3

Читайте о сборке мусора в . Net. Люди, прибывающие с земли С++, используются для явного распределения и управления памятью. В С# явное управление памятью практически не существует.

Другая тема, которую вы должны проверить, - это различие между С# generics и шаблонами С++. У меня нет хорошей ссылки для этого.

В зависимости от продукта, над которым вы работаете, вам может потребоваться вызвать функции API Win32 с С#. Это делается через P/Invoke, поэтому вы можете немного прочитать об этом. И если вы действительно должны его использовать, http://pinvoke.net - очень полезная коллекция объявлений С# для большинства API Win32.

Вы также можете узнать по крайней мере основы COM, так как очень часто С#/. Net-приложения выбирают/должны повторно использовать компоненты сторонних поставщиков, которые часто реализуются как COM-компоненты. COM - сложная тема. Мои любимые книги на COM и Essential COM от Don Box и Professional DCOM от Roger rimes. Я бы заимствовал их из библиотеки, так как все, что вам нужно прочитать, это первые несколько глав (если вы не хотите углубляться).

Основное понимание окон, сообщений и очередей сообщений необходимо, если вы собираетесь писать клиентские приложения. Вы будете использовать Winforms из WPF/XAML для этих целей, и обе технологии делают хорошую работу по изоляции деталей от вас; однако, чтобы иметь возможность писать хороший код, вам нужно знать, что происходит за кулисами. Я не уверен, какая хорошая книга для этого, но MSDN имеет много информации.

Ответ 4

Мой фон был преимущественно C/Unix и Python с некоторыми java и пыльными 2000-vintage VB6, когда я впервые использовал С#. Я был знаком с управляемыми временем выполнения из работы, которую я сделал с Java, и API-интерфейс .Net несколько похож на более ранние MS API.

Я нашел Troelsen Pro С# и платформу .Net 2.0, чтобы быть действительно хорошим ресурсом С#/. Net. Сейчас есть более свежие версии.

Ответ 5

Отъезд petzold dotnet book zero. Это может помочь.

Ответ 6

Получите копию Resharper. Это, вероятно, самый лучший инструмент повышения производительности для прямого кодирования.

Ответ 7

Не должно быть базы CLR? И не должно быть неважно, какой язык .NET используется? Если я просмотрю документы .NET, я могу решить, хочу ли я видеть материал в VB.Net, С# или С++. Итак, если вы знаете С++, почему вы не должны использовать "управляемый С++"?

Отношения Friedrich