Страницы

4 марта 2013 г.

Переходим с Delphi на C# (беглый взгляд + мысли вслух)

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

Хочется вложить и свои пять копеек...
Итак, 
Delphi-программист со стажем N лет переходит на C#.
       Первое, что хотелось бы отметить так это то, что языки очень схожи по идеологии. Читая самоучители по C# основное внимание поглощает синтаксис. Все остальное понятно и знакомо благодаря Delphi.
       Самое генеральное, на мой взгляд, отличие Delphi от C# - это что C# целиком и полностью объектно-ориентированный. В нем невозможно создать функцию отдельно от класса. (по крайней мере я этого не видел нигде, и самоучитель говорит тоже самое), хотя не исключено, что могут быть какие-то недокументированные нюансы. Но основная идея именно такая - все только внутри пользовательских типов.
        В C# простые типы представлены в виде объектов с набором некоторой функциональности. Например, целочисленный тип имеет метод int.ToString(), который преобразует целочисленное значение в строковое.

        Не нужно использовать дополнительных функций как в Delphi (IntToStr()), чтобы получить преобразование описанное выше. В C# базовые функции (методы) доступны уже при использовании типов. Это плюс.

        В C# каждый метод класса необходимо обозначить модификатором (public, private и т.д.), но нельзя выделить сразу целый блок private и/или public, как это можно сделать в Delphi. Это не первый взгляд кажется неудобным. Надо поработать, а там посмотрим...

        В C# при наличии параметров функций передающихся не по значению (по ссылке - ref, выходные параметры - out). При вызове функций необходимо указывать эти модификаторы явно. Хотя в Delphi можно только при объявлении функции указать модификаторы параметров а потом забыть про них. Возможно, это не удобно, но с другой стороны - минимизирует количество потенциальных ошибок программиста. Хотя я бы предпочел оставить как в Delphi. :)

        Перегрузка методов в C# производится без указания overload. Чтобы перегрузить метод необходимо определить новый метод с таким же именем но с другой семантикой вызова (типы, количество параметров). Это удобно. Далее, в C# нет такого понятия как параметры функции заданные по умолчанию, точнее, возможность указывать параметры по умолчанию появилась с версии 4.0. В более ранних версиях C# обходился использованием перегрузки функции с меньшим количеством параметров. Было немного неудобно.

        Работа с базами данных тоже организована немного по разному. В C# доступ осуществляется через ADO.NET, который ,на мой взгляд, более удобен и универсален, нежели различные наборы компонент в Delphi. В Delphi можно добиться универсальности как в C#, но для этого нужно будет написать класс-обертку на базе стандартных компонентов доступа. В C# активно применяется методология работы с данными без существующего коннекта к базе. В Delphi тоже есть такая возможность, но она на мой взгляд остается всегда в тени. В C# есть компонент Dataset, который возволяет внутри себя создает объектно-реляционную модель БД, с таблицами, связями, ограничениями полей. В Delphi, среди базовых компонентов, я такого не встречал.

Спустя полтора месяца....

        В C# есть атрибуты - это мега удобная вещь. Непременно почитайте о них. Здесь их описывать не имеет смысла ибо тема обширная и хорошо освещена в интернетах.

        В С# есть возможность вещать на одно событие класса множество обработчиков. Это очень удобно. Рулится все это групповыми делегатами.

        В общем, всех мелких нюансов не описать.  Я уже полтора месяца сижу на дотнете и пока что испытываю только положительные эмоции. Я понимаю, что могу стать причиной очередного холивара, которых уже бесчисленное множество, но я считаю что C# на порядок технологичнее делфи. Делфи - это классика, а Шарп - современный, легкий, удобный и продуманный язык. Конечно, если нужно писать что-то преимущественно системное, или низкоуровневое, или СИЛЬНО критична скорость работы (до долей секунды), тогда делфи несомненно в плюсе (если конечно вы не владеете C++ :) ), при условии отсутствия гавнокода.
Писать системный софт на C# - это все равно что купить планшетник и использовать его как доску для нарезки хлеба - дорого и бессмысленно. ИМХО.

Так что для высокоуровневых бизнес-приложений C# - это то, что доктор прописал. Но делфи тоже забывать не стоит. Иногда он тоже незаменим. ИМХО.
Просьба не кидать помидорами, а если кидаете, то кидайте свежие и поаккуратнее :)

7 комментариев:

  1. спасибо за статью, сам учу потихоньку. очень нравится.. заядлый дельфист с 2005 года. стараюсь сидеть на свежих дельфах, а то есть уникумы и немало, которые на 7-й версии застряли, и ни слухом ни духом, что такое юникод, обобщенное прогр-е, удобные контейнеры, те же аттрибуты и пр...

    ОтветитьУдалить
    Ответы
    1. Доброго времени суток. Скорее всего эти "уникумы" привязаны к древним делфям своими проектами, написанными на них, сомневаюсь что они руководствуются своим нежеланием что-то менять. Хотя люди разные бывают.
      После перехода на шарп, я продолжаю вести некоторые проекты на делфях, не потому что дотнет для них не заточен, а просто так проще и удобнее.

      Удалить
  2. "Далее в C# нет такого понятия как параметры функции заданные по умолчанию." - Параметры по умолчанию есть, во всяком случае в C# 4.0.

    ОтветитьУдалить
    Ответы
    1. Да, согласен, эта "фича" появилась начиная с 4.0 (http://habrahabr.ru/post/43814/)
      Спасибо за уточнение.

      Удалить
    2. "Спасибо за уточнение." Да, не за что! Сам год назад перешёл с Delphi на C#. Теперь назад ни за какие коврижки не уйду. :)

      Удалить
  3. ... контролы даже свои написал. Вот, если интересно: http://radiosoft.info/index.php/programms/net-controls

    ОтветитьУдалить
    Ответы
    1. Круто! Тоже начал задумываться на эту тему... по пока текучка не подпускает. :)

      Удалить