Поделиться через


Стратегия обучения разработчиков Java#

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

  1. Аналогичный синтаксис: Java и C# находятся в семействе языков C. Это сходство означает, что вы уже можете читать и понимать C#. Существуют некоторые различия, но большая часть синтаксиса совпадает с Java и C. Фигурные скобки и точка с запятой знакомы. Операторы управления, такие как if, elseswitchсовпадают. Цикловые операторы for, whileи do...while одинаковы. Одни и class те же ключевые слова для interface обоих языков. Модификаторы доступа совпадают publicprivate . Даже многие встроенные типы используют одни и те же ключевые слова: int, stringи double.
  2. Объектно-ориентированной парадигмы: Как Java, так и C# являются объектно-ориентированными языками. Понятия полиморфизма, абстракции и инкапсуляции применяются на обоих языках. Оба добавлены новые конструкции, но основные функции по-прежнему актуальны.
  3. Строго типизированные: Java и C# являются строго типизированными языками. Тип данных переменных объявляется явно или неявно. Компилятор обеспечивает безопасность типов. Компилятор перехватывает ошибки, связанные с типом в коде, перед запуском кода.
  4. Кроссплатформенные: Java и C# являются кроссплатформенными. Вы можете запускать средства разработки на любимой платформе. Приложение может работать на нескольких платформах. Платформа разработки не требуется для сопоставления целевой платформы.
  5. Обработка исключений: как Java, так и C# вызывают исключения для указания ошибок. Оба блока используются try - catch - finally для обработки исключений. Классы exception имеют аналогичные имена и иерархии наследования. Одно из различий заключается в том, что C# не имеет концепции проверенных исключений. Любой метод может (в теории) вызвать любое исключение.
  6. Стандартные библиотеки: среда выполнения .NET и стандартная библиотека Java (JSL) поддерживают распространенные задачи. Оба имеют обширные экосистемы для других пакетов открытый код. В C# диспетчер пакетов — NuGet. Это аналогично Maven.
  7. Сборка мусора. Оба языка используют автоматическое управление памятью с помощью сборки мусора. Среда выполнения освобождает память от объектов, на которые не ссылается ссылка. Одно из различий заключается в том, что C# позволяет создавать типы значений в виде struct типов.

Вы можете эффективно работать в C# практически сразу из-за сходства. По мере выполнения вы должны узнать о функциях и идиомах на C# , недоступных в Java:

  1. Сопоставление шаблонов: сопоставление шаблонов включает краткие условные операторы и выражения на основе формы сложных структур данных. is проверяет, является ли переменная "является" некоторым шаблоном. Выражениеswitch шаблонов предоставляет широкий синтаксис для проверки переменной и принятия решений на основе его характеристик.
  2. Интерполяция строк и необработанные строковые литералы: интерполяция строк позволяет вставлять вычислянные выражения в строку, а не использовать позиционные идентификаторы. Необработанные строковые литералы позволяют свести к минимуму escape-последовательности в тексте.
  3. Типы, допускающие значение NULL и не допускающие значение NULL: C# поддерживает типы значений, допускающие значение NULL, и ссылочные типы, допускающие значение NULL, путем добавления ? суффикса к типу. Для типов, допускающих значение NULL, компилятор предупреждает вас, если вы не проверяете наличие перед null отменой ссылки на выражение. Для типов, не допускающих значение NULL, компилятор предупреждает вас, если вы можете назначить null значение этой переменной. Ссылочные типы, не допускающие значения NULL, свести к минимуму ошибки программирования, которые вызывают ошибку System.NullReferenceException.
  4. Расширения. В C#можно создавать элементы, расширяющие класс или интерфейс. Расширения обеспечивают новое поведение для типа из библиотеки или всех типов, реализующих заданный интерфейс.
  5. LINQ: интегрированный язык запросов (LINQ) предоставляет общий синтаксис для запроса и преобразования данных независимо от его хранилища.
  6. Локальные функции: в C#можно вложить функции в методы или другие локальные функции. Локальные функции предоставляют еще один слой инкапсуляции.

В C# существуют другие функции, которые не находятся в Java. Функции, такие как async и await асинхронные операции модели в последовательном синтаксисе. Оператор using автоматически освобождает ресурсы, не относящиеся к памяти.

Существуют также некоторые аналогичные функции между C# и Java, которые имеют тонкие, но важные различия:

  1. Свойства и индексаторы: свойства и индексаторы (обработка класса, например массива или словаря), поддерживают язык. В Java они называют соглашения об именовании методов, начиная с get и set.
  2. Записи: В C#записи могут быть либо типами ссылок, либо classstruct (значение). Записи C# могут быть неизменяемыми, но не обязательно быть неизменяемыми.
  3. Кортежи имеют другой синтаксис в C# и Java.
  4. Атрибуты похожи на заметки Java.

Наконец, существуют функции языка Java, недоступные в C#:

  1. Проверенные исключения: в C#любой метод теоретически может вызвать любое исключение.
  2. Проверенная ковариация массива: в C#массивы не являются безопасными ковариантными. Если вам нужны ковариантные структуры, следует использовать универсальные классы и интерфейсы коллекции.

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