Я уже много лет являюсь разработчиком Delphi (D7), меня всегда интересовало, что такое .NET + C #. Я имею в виду не технологию / плагин "Delphi для .NET" или "Oxygene", а чистый .NET / C #.
Насколько он отличается от Delphi? И еще несколько вопросов ...
- Является ли Mono / SharpDevelop (любые другие, о которых мне следует знать?) Такими же возможностями, как несвободная Visual Studio?
- Что касается развертывания, как это работает? Сборка + фреймворк + исполняемый файл?
- Framework (последняя версия 3.5?) Работает как JVM для мира Java, верно? Обеспечивает ли он поддержку / использование таких технологий, как многоядерные процессоры или оптимизация для Windows?
- C # имеет некоторое сходство с Object Pascal, не должно быть слишком сложно адаптировать, верно?
Спасибо.
Ответ 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
Ответ 3 · Joe Tyman
Delphi был написан тем же человеком, который написал C #, поэтому общая структура языка не будет самым сложным переходом. Вы также должны помнить, что C # похож на C, а Delphi - на Pascal. Я пробовал искать Delphi после использования C #, это был очень сложный переход. Во-первых, нет сборки мусора, во-вторых, как @Alan заявил, что глобальные переменные жесткие. У вас есть наследование с C #, но вам не нужно объявлять Form как переменную TForm и т. Д. В-третьих, развертывание было огромной болью. С .Net и GAC вы действительно просто создаете свое решение и приступаете к работе. В-четвертых, гораздо большее беспокойство вызывает продолжение поддержки Delphi. Сейчас это его третья рота. Я бы подумал, что пойти противоположным путем с Delphi на C # будет намного проще.