C # на самом деле является мультиплатформенным языком?

20

C # (и платформа .net в целом) выглядит так, как будто он становится хорошим вариантом для многоцелевых приложений:

  • официальная среда MS .net: полная разработка Windows, разработка asp.net, разработка для Windows phone и т. д.
  • mono и все его производные: monotouch, monodroid: остальной мир. Эти инструменты сегодня RTM.

  • Означает ли это, что C # становится хорошим языком для таргетинга на самые популярные платформы: настольные, веб и мобильные?

  • Еще лучше использовать «родной» язык целевых платформ (цель C, Java и т. Д.)
  • Это только дымовая завеса и только маркетинговый язык?

Обратите внимание, что я на самом деле осознаю, что не смогу скопировать / вставить код между платформами. Но я уверен, что нижние уровни приложений (модели, бизнес и т. Д.) Можно использовать повторно, но я знаю, что мне придется адаптировать верхние уровни (Gui и т. Д.) Для платформы. Моя цель больше сосредоточена на требуемых навыках, чем на обмене техническим кодом.

[править] Я являюсь AC # разработчик в компании , которая массово использовать в C #. Вот почему я говорил о c # в плане расширения спектра целевых платформ в моей компании.

Стив Б
источник

Ответы:

12

Да, в целом .NET Framework отлично подходит для приложений, предназначенных для широкого спектра устройств. Но это не уникально для .NET; Ява делала это задолго до этого. Следует помнить, что реальной альтернативы нативным инструментам для конкретной платформы не существует.

Приложения Mac, создаваемые с помощью .NET, никогда не будут выглядеть как собственные приложения Mac OS X, и это считается проблемой для подавляющего большинства пользователей OS X. Это может быть неважно для вас в стратегическом плане, в зависимости от того, насколько ваша бизнес-модель оценивает максимальное насыщение по сравнению с максимальным удовлетворением пользователя, но это, безусловно, нужно учитывать при выборе.

Системы с графическим интерфейсом в Linux и Windows несколько более гибки с точки зрения того, какие приложения выглядят «родными» и хорошо вписываются в платформу. Но я виню в этом, главным образом, отсутствие четких рекомендаций по интерфейсу и тот факт, что разработчики приложений исторически были готовы игнорировать те, которые существуют. Многие пользователи Mac предпочитают Mac именно из- за его согласованного пользовательского интерфейса.

Учитывая, что вам придется адаптировать слой GUI для конкретной платформы (и, возможно, полностью переписать его на другом языке, например, Objective-C), вам придется использовать платформу .NET только для библиотечного кода. И, кроме того, на мой взгляд, для C # нет более явной победы над C ++.

Для быстрой разработки приложений есть несколько альтернатив, которые лучше, чем C # и .NET. А быстрое распространение приложения и немедленная его доступность на различных платформах, безусловно, является бизнес-преимуществом. Но для настоящих мультиплатформенных приложений, которые стремятся по-настоящему удовлетворить пользователя, это не обязательно решение «серебряной пули».

Коди Грей
источник
9
«Приложения Mac, созданные с помощью .NET, никогда не будут выглядеть как родные приложения Mac OS X, ...». Позвольте познакомить вас с MonoMac: mono-project.com/MonoMac
3
@Dimitris: скажем так, я в лучшем случае скептически отношусь. Люди Qt попробовали это, и люди все еще прыгают вверх и вниз по поводу того, что они достигли этого. Они не правы: нет. Приложения Qt не похожи на родные приложения OS X. Они просто ... не правы. Я не вижу скриншотов в предложенной вами ссылке, но даже если они получат идеальный пользовательский интерфейс, им все равно будут не все детали поведения и реализации. Спасибо за ссылку, хотя. Это то, что нужно для оптимизма.
Коди Грей,
7
@Cody Grey: MonoMac выглядит и ведет себя как родной, потому что это не кроссплатформенный API, а вместо этого встроенный API-интерфейс Cocoa. Это выглядит и действует родной, потому что это родной.
1
@Cody Grey: MonoMac для Mac - это то же самое, что MonoTouch для iOS. Вы можете писать нативные приложения, вы просто используете C # вместо Obj-C. Это не «заставляет WinForms или Gtk хорошо выглядеть на Mac».
2
Я просто хотел принять участие в обсуждении выше, так как я нахожусь в процессе создания системы, которая охватывает iPad и Windows Phone, ASP.NET MVC3 и NT Services, взаимодействуя с системой управления робототехникой. Mono, MonoDroid, MonoTouch и т. Д., Как указывал Коди выше, - это способ написания кода на C #, который позволяет вам использовать преимущества C # и .NET Framework (включая Linq), а также получать беспрепятственный доступ к вашему. «родной» API выбранной платформы ... при этом также избегаются многие проблемы управления памятью, присущие большинству нативного кода C / C ++ / ObjC.
Ричард Тернер
6

Microsoft .NET является официальной реализацией CLR, DLR, BCL, CLI и CLS. Другие компании, группы, сообщества или рабочие группы не связаны с Microsoft таким образом, что они могут иметь реализацию 1: 1 последней платформы и языковой версии.

По сути, вам необходимо проверить, какие языковые и инфраструктурные функции вы хотели бы использовать в конкретном проекте, и проверить, присутствуют ли они в неофициальных реализациях .NET.

Если вы ожидаете решения с однократной компиляцией и распространяете везде, вы ошибаетесь: вам нужно провести тематическое исследование.

Матиас Фидемрайзер
источник
Это много TLA !
Тамлин
@tamlyn да хахахаха
Матиас Фидемрайзер
Теперь, когда большая часть .NET является открытым исходным кодом, все изменилось ...
Ян
@Ian Конечно .......
Матиас Фидемрайзер
2

Я использую C # в играх, работающих на машинах XBOX и Windows, я использую его в приложениях Compact Framework для робототехнических решений, я использую MonoTouch для разработки iPad, у меня есть несколько веб-приложений, работающих на Linux, и несколько других решений. Обычно есть способ сделать свое дело на данной платформе. Основной слой примерно одинаков для большинства из них (на самом деле необходимо изучение конкретного случая). Проблема - и я считаю это одной из серий - это среда разработки. Я привык к Visual Studio и его возможностям. Но MonoDevelop, например, сводит меня с ума.

scarlaxx
источник
1
Novell недавно выпустила расширение VS 2010, чтобы вы могли разрабатывать код Mono в VS.
Морган Херлокер