Что является преимуществами c#, законченного, скажем, delphi/realbasic для [закрытых] приложений Windows

Как следует из текста ошибки, если вы хотите определить свойства в C ++, вам нужно объявить его с помощью макроса Q_PROPERTY и предоставить методы для него ( http://doc.qt.io/qt-5/ properties.html ).

Вы также можете определить свойства в QML:

Test {
    property string name: "xxx"
}

ListElement name и age не произвольные свойства, а роли модели ( ссылка ).

17
задан Paul Lefebvre 15 March 2017 в 14:57
поделиться

10 ответов

Назвать некоторых:

  • Автоматическое управление памятью, сборка "мусора"
  • Безопасность с точки зрения типов
  • Границы, проверяющие
  • Доступ к тысячам классов, которые Вы не должны будете создавать
12
ответ дан 30 November 2019 в 09:56
поделиться

ЛЮДИ: Обратите внимание на то, что это было записано в [1 110] февраль 2009 , и что сказано, был соответствующий в то время - вопящий на меня в конце 2012 года (3 + несколько лет спустя), бессмысленно. :-)

Delphi имеет некоторые значительные преимущества для Win32. Не то, чтобы приложения.NET являются по сути неработающими, но попытка:

  • запущение приложения.NET (любая версия) на Win95/ME, где.NET не существует (AFAIK)
  • распределение никого маленького (< 1,5 МБ) приложение.NET (да, дисководы для гибких дисков все еще существуют)
  • обеспечение какого-либо приложения.NET в системе, которая не имеет никакого доступа в Интернет (да, они существуют)
  • , распределение Ваших приложений.NET в странах без широко распространенной широкой полосы пропускания
  • мешает людям видеть Ваш исходный код, не тратя тонну теста (Отражение, кто-либо?)

Сборка "мусора" в.NET могла бы быть действительно хорошей, но любой, кто знает что-либо о программировании, может также обработать ручное выделение/освобождение памяти легко с Delphi, и GC доступен со считаемыми на ссылку интерфейсами. Не одна из вещей, которые принесли всем непрограммистам к быстрому увеличению псевдо-GC VB? IMO, GC является одной из вещей, которая делает.NET опасной, таким же образом VB был опасен - это делает вещи слишком легкими и позволяет людям, у которых действительно нет подсказки, что они делают для записи программного обеспечения, которое заканчивает тем, что делало путаницу. (И, прежде чем я горюсь до смерти здесь, это является большим для людей, которые делают , знают то, что они делают также, и так был VB; я просто не так уверен, что преимущество для квалифицированного перевешивает опасности нам от низкой квалификации.)

Призма Delphi (иначе Rem Objects Oxygene, раньше Chrome) обеспечивает версию GC Delphi, который те, кому нужен он, ищут, наряду с ASP.NET и WPF/Silverlight/CE, с удобочитаемостью (и отсутствие фигурных скобок) Delphi. Для тех (как я), для которого поддержка Unicode не является основным фактором, Delphi, который 2007 предоставляет ASP.NET и VCL.NET, а также собственной поддержке Win32. И, в месте как то, где я работаю, когда рабочие станции только обновляются (как минимум) каждые три года, и где мы просто избавились от последней машины Win95, потому что это не был приоритет обновить, платформа.NET является проблемой. (Особенно с требованиями прокси компании, только позволяющими доступ в Интернет горстке людей, ограничивая пропускную способность и возможности загрузки и надлежащие неадминистраторские учетные записи без позволенных USB-устройств, все все еще натыкание на сеть Netware - никакая такая вещь как Windows Update и никогда вирус до сих пор, потому что ничто не входит.)

я работаю некоторые на языках.NET (C#, Призма Delphi), но хлеб с маслом и полный рабочий день и на стороне, прибывает из Win32 и Delphi.

42
ответ дан 30 November 2019 в 09:56
поделиться

Хорошо сначала, Никакой язык/платформа никогда не будет универсально выше.

  • Специализация будет всегда обеспечивать лучший вариант использования в определенных областях, но языки общего назначения будут применимы к большему количеству доменов.
  • языки Мультипарадигмы пострадают от сложных граничных случаев между парадигмами, например,
    • Вывод типа на любом функциональном языке, который также позволяет ООП при дарившем sub классы
    • грамматика C++ удивительно сложна, Это оказывает прямое влияние на способности его набора инструментальных средств.
    • сложности co/contra различия вместе с дженериками в c# очень твердо понять.

Более старые языки будут иметь существующие кодовые базы, которые работают, это оба положительно (опыт, хорошо протестированная, обширная литература поддержки), но также и отрицание (получающаяся инерция против изменения, несколько различных способов сделать вещи продвижение к беспорядку для новых участников).

выбор/использование и языков и платформ, как большинство вещей, балансировка за и против.

В следующем Delphi списков имеет некоторые из тех же за и против, но расходится во многих также.

Потенциал Отрицательные стороны .NET (если они не проблема Вам, они не отрицательные стороны)

  • Да, Вам нужно развернутое время выполнения (и установленный), и это является большим.
  • , Если Вы хотели язык со множественным наследованием, Вы не собираетесь получать его
  • , библиотека наборов BCL имеет некоторые серьезные дефекты
  • Не широко поддерживаемый вне вселенной MS (моно, является большим, но оно значительно изолирует официальную реализацию)
  • Потенциальное препятствие патента/авторского права
  • Jitted (игнорирующий ngen), время запуска всегда будет медленнее, и больше памяти будет необходимо.

существуют больше, но это выделения.

Потенциал Положительные стороны (снова, если они не имеют значения для Вас)

  • А универсальный GC, никакой подсчет ссылок, который предотвращает определенные структуры данных, являющиеся применимым, я не знаю ни о каком широко используемом Функциональном языке без GC, я не могу думать о значительном языке прошлых 10 лет, по крайней мере, без дополнительного GC. Если бы Вы полагаете, что это не грандиозное предприятие, Вы, казалось бы, были бы в меньшинстве.
  • А большой BCL (некоторые части, не столь хорошие как другие, но это очень широко)
  • Огромные количества языков (и удивительное количество парадигм) могут использоваться и взаимодействовать друг с другом (я использую c#, f#, C++ / CLI в рамках одного более широкого приложения с помощью каждого, где он имеет большую часть смысла, но способный легко использовать аспекты одного от другого).
  • Полнофункциональный самоанализ, объединенный с поддержкой декларативного программирования. Большое разнообразие платформ становится намного более простым и легким для использования этим способом.
  • Jitted - изменения в базовой архитектуре ЦП могут быть в основном прозрачной, сложной оптимизацией во время выполнения, не доступной предварительно скомпилированным языкам, возможны (Java делает скорее лучше на этом в настоящее время)
  • безопасность доступа к памяти
  • Fusion dll загрузка и GAC для системы dlls

Аналогично специально для c#

Con:

  • Синтаксис на основе основ C
  • (пред 4,0) позднее связывание только через наследование
  • Более подробный, чем некоторые императивные языки
  • плохая обработка комплекса встроила литералы (regexes/xml/multi строки строки)
  • , переменное получение в рамках закрытий может путать
  • , вложенные генераторы являются и громоздкими и работают ужасающе

Pro:

  • Синтаксис на основе основ C
  • Много функциональной поддержки через лямбды
  • Выражения, позволяющие проверку времени компиляции не, кодируют области, такие как Linq к SQL
  • , Со строгим контролем типов, но с некоторым Выводом типа для создания этого легче
  • , если Вам действительно нужно к небезопасному, там для Вас
  • взаимодействие с существующим C++, код ABI через P/Invoke является и простым и четким.
  • многоадресная модель событий встроена.
  • генерация кода времени выполнения легкого веса

основы C действительно является за и против. Это понятно огромным количеством программистов (по сравнению с основанным на Паскале стилем), но имеет определенное количество хлама (операторы переключения, являющиеся ясным примером).

Сильные/Слабые/Статичные/Динамичные системы типов являются дебатами поляризации, но это, конечно, не спорно, чтобы сказать, что, то, где система типов больше ограничивает его, должно стремиться не потребовать, чтобы чрезмерное многословие в результате c# было, конечно, лучше, чем многие в том отношении.

Для многих внутренних приложений Направления деятельности огромное количество Недостатков платформы .NET являются абсолютно несущественными (управляемое развертывание, являющееся общей и хорошо решенной проблемой в корпорациях). Использование как таковое .NET (и это делает в основном средний c#, извините парни VB.Net), довольно очевидный выбор для новой разработки в архитектуре окон.

12
ответ дан 30 November 2019 в 09:56
поделиться

Хорошо, я сомневаюсь, что это убедит Вас, поскольку Вы не хотите быть убежденными, но вот мое представление преимуществ.NET по более старым технологиям. Я не собираюсь утверждать, что каждое преимущество относится к каждому языку, который Вы упомянули в вопросе, или что.NET прекрасна, но:

  • управляемая среда А фиксирует распространенные ошибки ранее и дает новые возможности:

    • Строгий контроль типов старается не рассматривать один тип как другого неправильно
    • , Сборка "мусора" в основном удаляет проблемы управления памятью (не полностью, я с готовностью признаю)
    • "Отказ сегментации", обычно переводит в "NullReferenceException" - но в намного более легком для отладки способа!
    • Никакой шанс переполнения буфера (кроме потенциала для ошибок CLR, конечно) - который сразу удаляет большую проблему безопасности
    • , модель обеспечения безопасности описания А и хорошо разработанное время выполнения позволяют коду быть выполненным под множеством доверительных уровней
    • , JITting позволяет CLR использовать в своих интересах работу машины на 64 бита без необходимой перекомпиляции (кроме для некоторых interop ситуаций)
    • , будущие разработки процессора могут также являться целью Дрожания, давая улучшения без работы со стороны разработчика (включая никакую потребность восстановить или распределить несколько версий).
    • Отражение допускает все виды вещей, которые или невозможны или тверды в неуправляемых средах
  • А современная объектно-ориентированная платформа:

    • Дженерики со знанием времени выполнения (в противоположность стиранию типа в Java)
    • Разумная поддержка поточной обработки, с новым набором примитивов (Параллельные Расширения) прибывающий в.NET 4.0
    • Интернационализация и поддержка Unicode со стороны очень запускаются - всего один строковый тип для рассмотрения, с одной стороны, :)
    • , Windows Presentation Framework служит современной основой GUI, допуская декларативный дизайн, наглядность и анимация поддерживают и т.д.
    • Хорошая поддержка взаимодействия с собственными библиотеками (P/Invoke так намного более хорош, чем JNI, например)
    • , Исключения намного более информативны (и легче иметь дело с), чем коды ошибок
    • , LINQ (в.NET 3.5) предоставляет прекрасному способу работать с незавершенными данными, также дающие различные варианты для работы с базами данных, веб-сервисами, LDAP и т.д.
    • , Делегаты позволяют несколько функциональный стиль кодирования от VB и C#; это лучше в C# 3.0 и VB9 из-за лямбда-выражений.
    • LINQ к XML является самой хорошей библиотекой XML, которой я пользовался
    • Используя Silverlight, поскольку платформа RIA позволяет Вам совместно использовать много кода между Вашим легким клиентом и другими методами доступа
    • А главным образом хорошая история управления версиями, включая обязательное перенаправление, предпочтение во время выполнения и т.д.
  • Одна платформа, являвшаяся целью нескольких языков:

    • Более простой совместно использовать компоненты, чем с (говорят), что выбор COM
    • Языка может управляться опытом команды и задачей. Это будет особенно значительно с.NET 4.0: где функциональный язык является более соответствующим, используйте F#; где динамический язык является более соответствующим, используйте IronRuby или IronPython; взаимодействуйте легко между всеми языками
    • Откровенно говоря, я просто думаю, что C# является намного более чистым языком, чем VB или C++. (Я не знаю Delphi, и я услышал хорошие вещи об этом, хотя - и эй, можно быть нацелены на.NET с Delphi теперь так или иначе.)

результат большей части из этого - и слоган, я предполагаю - то, что .NET позволяет более быстрой разработке большего количества устойчивых приложений .

решать эти две конкретных проблемы, которые Вы упомянули в вопросе:

  • , Если Ваш клиент запускает Vista, у них уже есть.NET 3.0. Если они выполняют XP SP2 или SP3, у них , вероятно есть, по крайней мере.NET 2.0. Да, необходимо загрузить более новую версию платформы, если Вы хотите использовать ее, но я просматриваю это как довольно маленькую проблему. Я не думаю, что имеет любой смысл сравнивать размер Вашего приложения с размером платформы. Вы сравниваете размер своего приложения с размером операционной системы или размером Вашего IDE?
  • я не просматриваю декомпиляцию как почти такую проблему как большинство людей. Действительно необходимо думать о том, чего Вы боитесь:
    • , Если Вы боитесь людей, копирующих Ваш фактический код, обычно намного легче кодировать с нуля, если Вы знаете о базовой конструкции. Примите во внимание, что декомпилятор не даст имена локальной переменной (предполагающий, что Вы не распределяете свой PDB), или комментарии. Если Ваш код первоисточника только столь же легко понять как декомпилируемая версия, у Вас есть большие проблемы, чем пиратство.
    • , Если Вы боитесь людей, обходящих Ваше лицензирование и ограбление Вашего кода, необходимо принять во внимание, сколько усилия вошло в то, чтобы мешать людям грабить исходные приложения - и насколько неэффективный это было.
    • Большое использование.NET находится на сервере, или для внутренних приложений - ни в одном из этих случаев декомпиляция проблема.
    • я записал больше по этой теме в этом статья о декомпиляции и путанице .
23
ответ дан 30 November 2019 в 09:56
поделиться

"Простота" разработки комплекса (и простой) приложения с помощью него. Много основного материала уже кодируется для Вас в платформе, и можно просто использовать его. И загрузка файла 35 МБ сегодня намного легче, чем файл 8-6 2 МБ несколько лет назад.

10
ответ дан 30 November 2019 в 09:56
поделиться

Существует много причин. Я не знаю много о RealBasic, но насколько Delphi идет:

  • менее широко распространенный, чем.NET, меньшее сообщество разработчиков. Многие ресурсы Delphi в сети являются древними и устарели.

  • До Delphi 2009, Delphi не имел полной поддержки unicode.

  • я не знаю о Delphi, 2009, но 2007 не имел очень хорошей сборки "мусора". Это имело своего рода неуклюжий подсчет ссылок, который потребовал некоторого вмешательства от имени разработчика..NET имеет намного более усовершенствованный GC, который делает фактически все для Вас.

  • .NET имеет более крупную стандартную библиотеку и более актуальные сторонние библиотеки.

  • языки.NET как C# возможно лучше, и конечно легче понять для плохо знакомых с языком.

7
ответ дан 30 November 2019 в 09:56
поделиться

Существует много воображаемых преимуществ, процитированных разработчиками.NET здесь, которые не должны быть в том сравнении, просто потому что Delphi имеет их также:

  • Безопасность с точки зрения типов
  • Границы, проверяющие
  • Доступ к тысячам классов (компоненты), которые Вы не должны будете создавать

, существуют однако некоторые вещи в.NET, что Delphi не имеет out-of-the поля, и только некоторые из тех могут быть добавлены библиотеками и собственным кодом. Назвать некоторых:

  • Поддержка нескольких языков, работающих сверху того же времени выполнения - позволяющий выбирать язык соответствия для проблемы (например, функциональное программирование с помощью F#)
  • Динамическое поколение исходного кода и компиляция - это - что-то столь чуждое программистам Delphi, что они, вероятно, даже не видят, как могло быть полезно [1]
  • Многоадресные события
  • Лучшая поддержка многопоточности (например, класс BackgroundWorker, асинхронные делегаты)
  • Бесшовная поддержка обоих процессов на 32 и 64 бита
  • Слабые ссылки

[1], Если Вы не знаете, но интересно, проверяете домашняя страница Marc Clifton , особенно статьи о декларативном программировании.

Редактирование: я хотел бы ответить на комментарий Mason Wheeler:

  1. Ре динамический код: Я знаю, что существуют решения иметь сценарии Паскаля, встроенные в приложение. Существуют однако явные различия между предоставлением доступа к частям Вашей внутренней иерархии объектов, для механизма выполнения сценариев и наличием того же компилятора, который используется для Вашего кода, доступного во времени выполнения также. Всегда существуют различия между компилятором Delphi и компилятором механизма выполнения сценариев. Так или иначе то, что Вы получаете с.NET, идет далеко вне чего-либо, что доступно для Delphi. И так или иначе, это не точка, можно ли было смочь кодировать подобную инфраструктуру для Delphi, дело в том, что с.NET это уже там для Вас при необходимости в нем.

  2. события Re Multicast: Точно, существуют способы кодировать его, но это не часть Delphi / VCL out-of-the-box. Это - то, что я говорил выше.

  3. слабые ссылки Ре: Вы печально ошибаетесь. Попытайтесь использовать интерфейсы нетривиальным способом, создав циклические ссылки на пути. Затем необходимо начать использовать преобразования типа и желание слабых ссылок.

6
ответ дан 30 November 2019 в 09:56
поделиться

Ну, Платформа.NET совместно используется для всех приложений.NET, таким образом, у Вас есть она только однажды на Вашей машине, и 35 МБ - ничто сегодня (сравните ее с размером Вашей установки Vista). Для Вашего второго приложения.NET Вы не должны загружать его снова.

4
ответ дан 30 November 2019 в 09:56
поделиться

Для Приложения Windows.NET (использующий C# или безотносительно) дает Вам более прямой доступ к последнему и самому большому Windows features. Это также очень хорошо поддерживается Microsoft, имеет огромное сообщество и много книг, записанных об этом.

REALbasic (теперь Xojo) для межплатформенных приложений. Используя его только в Windows может иногда быть полезным, но это не было бы его силой (который является, что это удивительно просто в использовании).

я не знаю много о Delphi.

4
ответ дан 30 November 2019 в 09:56
поделиться

Насколько я понимаю, в RealBASIC не так уж много (если вообще есть) инструментов объектно-реляционной обработки, и, вероятно, он не будет таким хорошим выбором для многоуровневых приложений, ориентированных на базы данных.

0
ответ дан 30 November 2019 в 09:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: