Ist c # tatsächlich eine Multiplattformsprache?

20

C # (und die .net-Plattform im Allgemeinen) scheinen eine gute Option für Multi-Targeting-Apps zu sein:

  • offizielles MS .net-Framework: Windows-Entwicklung auf Hochtouren, asp.net-Entwickler, Windows Phone-Entwickler usw.
  • Mono und alle seine Ableitungen: Monotouch, Monodroid: der Rest der Welt. Diese Tools sind heute RTM.

  • Bedeutet dies, dass C # eine gute Sprache für das Targeting der beliebtesten Plattformen ist: Desktop, Web und Mobile?

  • Ist es noch besser, die "native" Sprache der Zielplattformen (Objective C, Java usw.) zu verwenden?
  • Ist es nur eine Rauchwand und nur eine Marketing-Sprache?

Bitte beachte, dass mir bewusst ist, dass ich den Code nicht zwischen Plattformen kopieren / einfügen kann. Ich bin mir aber sicher, dass die niedrigeren Schichten von Anwendungen (Modelle, Unternehmen usw.) wiederverwendet werden können, aber ich weiß, dass ich die höheren Schichten (GUI usw.) an die Plattform anpassen muss. Mein Ziel ist mehr auf die erforderlichen Fähigkeiten als auf die gemeinsame Nutzung von technischem Code ausgerichtet.

[Bearbeiten] Ich bin ein Entwickler in einer Firma, die massiv C # verwendet. Aus diesem Grund habe ich in einem Plan über c # gesprochen, um das Angebot an Zielplattformen in meinem Unternehmen zu erweitern.

Steve B
quelle

Antworten:

12

Ja, im Allgemeinen eignet sich .NET Framework hervorragend für Apps, die auf eine breite Palette von Geräten abzielen. Dies gilt jedoch nicht nur für .NET. Java hat das schon lange gemacht. Beachten Sie, dass es für eine bestimmte Plattform keine echte Alternative zu den nativen Tools gibt.

Die Mac-Anwendungen, die Sie mit .NET erstellen, sehen niemals wie native Mac OS X-Anwendungen aus, und dies wird von der überwiegenden Mehrheit als Problem angesehen der OS X-Benutzer . Das mag für Sie strategisch nicht wichtig sein, je nachdem, ob Ihr Geschäftsmodell die Maximierung der Sättigung vor der Maximierung der Benutzerzufriedenheit bewertet, aber es ist sicherlich etwas, das Sie bei der Auswahl berücksichtigen sollten.

Die GUI-Systeme unter Linux und Windows sind etwas flexibler, da die Anwendungen "nativ" aussehen und sich gut in die Plattform einfügen. Ich beschuldige dies jedoch hauptsächlich des Fehlens klarer Richtlinien für die Benutzeroberfläche und der Tatsache, dass Anwendungsentwickler in der Vergangenheit gewillt waren, die vorhandenen zu ignorieren. Viele Mac-Benutzer bevorzugen den Mac gerade wegen seiner einheitlichen Benutzeroberfläche.

In Anbetracht dessen, dass Sie die GUI-Ebene an die spezifische Plattform anpassen müssen (und möglicherweise in einer anderen Sprache wie Objective-C neu schreiben müssen), können Sie die .NET-Plattform nur für Bibliothekscode nutzen. Und dann gibt es meiner Meinung nach keinen klaren Gewinn für C # gegenüber C ++.

Für eine schnelle Anwendungsentwicklung gibt es nur wenige Alternativen, die besser sind als C # und .NET. Und eine App schnell herauszubringen und sofort auf einer Vielzahl von Plattformen verfügbar zu machen, ist mit Sicherheit ein Geschäftsvorteil. Für echte plattformübergreifende Anwendungen, die den Benutzer wirklich zufrieden stellen sollen, ist dies jedoch nicht unbedingt die Standardlösung.

Cody Gray
quelle
9
"Die Mac-Anwendungen, die Sie mit .NET erstellen, sehen niemals wie native Mac OS X-Anwendungen aus, ...". Ich möchte Ihnen MonoMac vorstellen: mono-project.com/MonoMac
3
@ Dimitris: Sagen wir einfach, ich bin bestenfalls skeptisch. Die Qt-Leute haben es versucht, und die Leute springen immer noch auf und ab, weil sie es geschafft haben. Sie liegen falsch: Sie haben nicht. Qt-Anwendungen sehen nicht wie native OS X-Anwendungen aus. Sie sind nur ... falsch. Ich sehe keine Screenshots in dem von Ihnen vorgeschlagenen Link, aber selbst wenn sie die Benutzeroberfläche perfekt machen, fehlen ihnen immer noch alle Verhaltens- und Implementierungsdetails. Vielen Dank für den Hinweis. Es ist etwas zu optimistisch.
Cody Grey
7
@Cody Gray: MonoMac sieht nativ aus und handelt nativ, da es sich nicht um eine plattformübergreifende API handelt, sondern die zugrunde liegende Cocoa-API nativ umschließt. Es sieht aus und handelt nativ, weil es nativ ist.
1
@Cody Gray: MonoMac ist für Mac, was MonoTouch für iOS ist. Sie können native Apps schreiben, verwenden Sie einfach C # anstelle von Obj-C. Es ist nicht "WinForms oder Gtk auf dem Mac gut aussehen lassen".
2
Ich wollte mich gerade an der obigen Diskussion beteiligen, da ich gerade dabei bin, ein System zu erstellen, das iPad und Windows Phone, ASP.NET MVC3 und NT Services umfasst und mit einem Robotik-Steuerungssystem verbunden ist. Mono, MonoDroid, MonoTouch usw. sind, wie Cody oben ausgeführt hat, eine Möglichkeit, Code in C # zu schreiben, mit der Sie die Vorteile von C # und .NET Framework (einschließlich Linq) nutzen und gleichzeitig uneingeschränkten Zugriff auf Ihr System erhalten gewählte "native" APIs der Plattform ... und gleichzeitig die vielen Speicherverwaltungsprobleme vermeiden, die mit den meisten nativen C / C ++ / ObjC-Codes verbunden sind.
Richard Turner
6

Microsoft .NET ist die offizielle Implementierung von CLR, DLR, BCL, CLI und CLS. Andere Unternehmen, Gruppen, Communities oder Arbeitsgruppen sind nicht in einer Weise mit Microsoft verbunden, die eine 1: 1-Implementierung des neuesten Frameworks und der neuesten Sprachversion ermöglicht.

Grundsätzlich müssen Sie überprüfen, welche Sprach- und Framework-Funktionen Sie in einem konkreten Projekt nutzen möchten, und prüfen, ob diese in inoffiziellen .NET-Implementierungen vorhanden sind.

Wenn Sie eine einmal kompilierbare Lösung erwarten und diese überall verteilen, liegen Sie falsch: Sie müssen eine Fallstudie erstellen.

Matías Fidemraizer
quelle
Das sind viele TLAs !
Tamlyn,
@tamlyn yeah hahahaha
Matías Fidemraizer
Jetzt, da so viel von .NET Open Source ist, haben sich die Dinge geändert ...
Ian
@ Ian Sure .......
Matías Fidemraizer
2

Ich verwende C # für Spiele, die auf XBOX- und Windows-Computern ausgeführt werden, ich verwende es in Compact Framework-Apps für Robotiklösungen, ich verwende MonoTouch für die iPad-Entwicklung, ich habe einige Web-Apps, die unter Linux ausgeführt werden, und einige andere Lösungen. Normalerweise gibt es einen Weg, wie man sein Ding auf einer bestimmten Plattform macht. Die Kernschicht ist für die meisten von ihnen ungefähr gleich (eine Fallstudie ist in der Tat erforderlich). Das Problem - und ich betrachte es als ein Serienproblem - ist die Entwicklungsumgebung. Ich bin an Visual Studio und seine Funktionen gewöhnt. Aber MonoDevelop zum Beispiel macht mich verrückt.

scarlaxx
quelle
1
Novell hat kürzlich eine VS 2010-Erweiterung veröffentlicht, mit der Sie Mono-Code in VS entwickeln können.
Morgan Herlocker