Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Из Delphi в .NET + C #

Автор вопроса: AtlasОтветов: 3

Я уже много лет являюсь разработчиком Delphi (D7), меня всегда интересовало, что такое .NET + C #. Я имею в виду не технологию / плагин "Delphi для .NET" или "Oxygene", а чистый .NET / C #.

Насколько он отличается от Delphi? И еще несколько вопросов ...

  • Является ли Mono / SharpDevelop (любые другие, о которых мне следует знать?) Такими же возможностями, как несвободная Visual Studio?
  • Что касается развертывания, как это работает? Сборка + фреймворк + исполняемый файл?
  • Framework (последняя версия 3.5?) Работает как JVM для мира Java, верно? Обеспечивает ли он поддержку / использование таких технологий, как многоядерные процессоры или оптимизация для Windows?
  • C # имеет некоторое сходство с Object Pascal, не должно быть слишком сложно адаптировать, верно?

Спасибо.

delphi

Ответы

Ответ 1 · рейтинг 4 · Marc Gravell

По первому пункту: пробовали ли вы (бесплатную) VIsual Studio Express Edition? Это прекрасно подходит для многих вещей. У вас просто не так много помощников / дизайнеров и нет поддержки плагинов (для расширений IDE).

Что касается второго: исключая некоторые неприятные уловки, вы не можете создать чистый родной исполняемый файл из .NET; он сильно полагается на доступность инфраструктуры на локальном компьютере. Сборка - это просто пакет IL и может содержаться (обычно) либо в dll, либо загружаться в исполняемый файл, который загружает точку входа сборок; но в этом сценарии exe - это просто простой загрузчик плюс обычная сборка.

Собственно, CLR больше похожа на JVM; "каркас" на самом деле эквивалентен BCL. Основная структура MS + CLR, безусловно, имеет некоторые оптимизации для Windows, но другие среды выполнения / платформы (компактный, micro, Silverlight, Mono) будут разные оптимизации.

Повторно многоядерный - у вас есть полная поддержка потоков (для самостоятельного выполнения), но основная автоматизированная многоядерная поддержка (надеюсь) будет в .NET 4.0 с "параллельные расширения" работают.

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

[обновить вопросы]

IL = промежуточный язык; .NET компилируется не под собственные инструкции ЦП, а с чем-то промежуточным, что становится инструкцией ЦП во время выполнения (скомпилировано "Just In Time" (JIT) на основе метода за методом). Это означает, что JIT-компилятор может оптимизировать тот же IL для локальной машины. Вы можете сделать это заранее, используя NGen.

CLR = Common Language Runtime; по сути виртуальная машина

BCL = Библиотека базовых классов; набор классов разделял мои многие приложения

Повторное развертывание: сначала установите .NET framework на клиенте ;-p

После этого - разные варианты. На самом простом уровне вы можете просто скопировать exe / etc на локальный компьютер и запустить. Например, я использую "robocopy" для отправки кода на веб-серверы.

Для полной локальной установки сложного клиентского приложения можно использовать msi (и полная VS IDE поможет вам в этом).

Для простых клиентов вы можете использовать ClickOnce - который упаковывает приложение в подписанный пакет, который обеспечивает возможности самообновления и т. д. и позволяет вам делать заявления о том, какая безопасность вам нужна (полное доверие и т. д.). Express Edition позволяет создавать пакеты ClickOnce. ClickOnce можно использовать даже на заблокированных клиентах, на которых пользователь не может устанавливать приложения, поскольку приложение изолировано и изолировано.

Наконец, вы можете запустить приложение .NET из общего сетевого ресурса, но это может сказаться на безопасности: уровень "Безопасность доступа для кода" не будет предоставлять сетевому ресурсу "полное доверие" (хотя в последнее время в него были внесены некоторые изменения, так что сопоставленные (F: etc) общие ресурсы являются доверенными). Поэтому вам нужно использовать CASPOL на каждом клиенте, чтобы доверять коду. ClickOnce было бы проще ;-p

Ответ 2 · рейтинг 3 · Alan

В дополнение к ответу Марка это были незначительные приятные сюрпризы во время моего перехода с D6 на C #:

  • лучше ООП, без глобальных переменных ("var MainForm: TMainForm" и т.п.)
  • все строго типизировано (в общем, у вас может не быть типов указателей)
  • в Windows Forms "текстовый файл .dfm" (здесь YourForm.Designer.cs) на самом деле представляет собой код C #, а не описание ресурса на настраиваемом языке. (Однако это резко изменилось с появлением WPF и XAML.)
  • возможны настраиваемые типы значений ("структуры") (например, у вас может быть "сложный" тип, который ведет себя как целое или единственное число, живущее в стеке)
  • перегрузка оператора

И мелкие неприятные сюрпризы:

  • нет ссылок на классы, подобные Delphi ("класс xxx", например, "тип TControlClass: класс TControl")
  • нет индексированных свойств (хотя вы можете подделать это с помощью вложенных классов)

Что ж, это все, о чем я могу думать прямо сейчас, через несколько лет.

Ответ 3 · Joe Tyman

Delphi был написан тем же человеком, который написал C #, поэтому общая структура языка не будет самым сложным переходом. Вы также должны помнить, что C # похож на C, а Delphi - на Pascal. Я пробовал искать Delphi после использования C #, это был очень сложный переход. Во-первых, нет сборки мусора, во-вторых, как @Alan заявил, что глобальные переменные жесткие. У вас есть наследование с C #, но вам не нужно объявлять Form как переменную TForm и т. Д. В-третьих, развертывание было огромной болью. С .Net и GAC вы действительно просто создаете свое решение и приступаете к работе. В-четвертых, гораздо большее беспокойство вызывает продолжение поддержки Delphi. Сейчас это его третья рота. Я бы подумал, что пойти противоположным путем с Delphi на C # будет намного проще.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы