Est-ce que c # est en fait un langage multiplateforme?

20

C # (et la plate-forme .net en général) semble devenir une bonne option pour les applications de ciblage multiple:

  • framework MS .net officiel: développement Windows complet, asp.net dev, Windows phone Dev, etc.
  • mono et tous ses dérivés: monotouch, monodroid: le reste du monde. Ces outils sont aujourd'hui RTM.

  • Cela signifie-t-il que C # devient un bon langage pour cibler les plateformes les plus populaires: desktop, web et mobile?

  • Est-il encore préférable d'utiliser le langage "natif" des plateformes cibles (objectif C, Java, etc.)
  • Est-ce seulement un écran de fumée et seulement un langage marketing?

Veuillez noter que je suis en fait conscient que je ne pourrai pas copier / coller le code entre les plates-formes. Mais je suis sûr que les couches inférieures d'applications (modèles, business, etc.) peuvent être réutilisées, mais je sais que je devrai adapter les couches supérieures (Gui, etc.) à la plateforme. Mon objectif est davantage axé sur les compétences requises que sur le partage de code technique.

[modifier] Je suis développeur ac # dans une entreprise qui utilise massivement c #. C'est pourquoi j'ai parlé de c # dans un plan visant à élargir la gamme de plates-formes cibles dans mon entreprise.

Steve B
la source

Réponses:

12

Oui, en général, le .NET Framework est idéal pour les applications qui ciblent une large gamme d'appareils. Mais ce n'est pas unique à .NET; Java le faisait bien avant. La chose à garder à l'esprit est qu'il n'y a pas de véritable alternative aux outils natifs pour une plate-forme particulière.

Les applications Mac que vous créez avec .NET ne ressembleront jamais à des applications Mac OS X natives, ce qui est considéré comme un problème par la grande majorité des utilisateurs d'OS X. Cela peut ne pas être important pour vous stratégiquement, selon que votre modèle d'entreprise valorise la maximisation de la saturation par rapport à la maximisation de la satisfaction des utilisateurs, mais c'est certainement quelque chose à garder à l'esprit lorsque vous faites un choix.

Les systèmes GUI sous Linux et Windows sont un peu plus flexibles quant aux applications qui paraissent "natives" et s'intègrent bien avec la plate-forme. Mais je blâme cela principalement sur le manque de directives d'interface claires et sur le fait que les développeurs d'applications ont toujours été prêts à ignorer ceux qui existent. De nombreux utilisateurs de Mac préfèrent le Mac précisément en raison de son interface utilisateur cohérente.

Étant donné que vous devrez adapter la couche GUI à la plate-forme spécifique (et éventuellement la réécrire entièrement dans un langage différent, tel que Objective-C), ce qui vous laisse utiliser la plate-forme .NET uniquement pour le code de bibliothèque. Et puis il n'y a pas de victoire très claire pour C # sur C ++, à mon avis.

Pour un développement rapide d'applications, il existe peu d'alternatives meilleures que C # et .NET. Et pousser une application rapidement et la rendre immédiatement disponible sur une diversité de plateformes est certainement un avantage commercial. Mais pour de véritables applications multi-plateformes qui visent à vraiment satisfaire l'utilisateur, ce n'est pas nécessairement la solution miracle.

Cody Grey
la source
9
"Les applications Mac que vous créez avec .NET ne ressembleront jamais à des applications natives Mac OS X, ...". Permettez-moi de vous présenter MonoMac: mono-project.com/MonoMac
3
@Dimitris: Disons simplement que je suis sceptique, au mieux. Les gens de Qt ont essayé cela, et les gens sautent toujours de haut en bas sur leur réussite. Ils ont tort: ​​ils ne l'ont pas fait. Les applications Qt ne ressemblent pas à des applications OS X natives. Ils ont juste ... tort. Je ne vois aucune capture d'écran dans le lien que vous avez suggéré, mais même si l'interface utilisateur est parfaite, il leur manquera toujours tous les détails de comportement et d'implémentation. Merci pour la référence, cependant. Il faut être optimiste.
Cody Gray
7
@Cody Gray: MonoMac ressemble et agit en natif car il ne s'agit pas d'une API multiplateforme, mais à la place, il enveloppe nativement l'API Cocoa sous-jacente. Il ressemble et agit natif car il EST natif.
1
@Cody Gray: MonoMac est pour Mac ce que MonoTouch est pour iOS. Vous pouvez écrire des applications natives, vous utilisez simplement C # au lieu d'Obj-C. Il ne s'agit pas de "rendre WinForms ou Gtk beau sur Mac".
2
Je voulais juste participer à la conversation ci-dessus, car je suis en train de construire un système qui couvre iPad et Windows Phone, ASP.NET MVC3 et NT Services interfaçant avec un système de contrôle robotique. Mono, MonoDroid, MonoTouch, etc., comme l'a souligné Cody ci-dessus, est un moyen d'écrire du code en C # qui vous permet de profiter de la puissance de C # et du .NET Framework (y compris Linq) tout en bénéficiant d'un accès sans entraves à votre API "native" de la plate-forme choisie ... tout en évitant les nombreux problèmes de gestion de la mémoire inhérents à la plupart des codes C / C ++ / ObjC natifs.
Richard Turner
6

Microsoft .NET est l'implémentation officielle de CLR, DLR, BCL, CLI et CLS. D'autres sociétés, groupes, communautés ou groupes de travail ne sont pas associés à Microsoft de manière à ce qu'ils puissent avoir une implémentation 1: 1 de la dernière version du cadre et de la langue.

Fondamentalement, vous devez examiner le langage et les fonctionnalités de framework dont vous souhaitez profiter dans un projet concret et vérifier s'ils sont présents dans les implémentations .NET non officielles.

Si vous attendez une solution à compiler une fois et la distribuer partout, vous vous trompez: vous devez faire une étude de cas.

Matías Fidemraizer
la source
Ça fait beaucoup de TLA !
Tamlyn
@tamlyn yeah hahahaha
Matías Fidemraizer
Maintenant que tant de .NET est open source, les choses ont changé ....
Ian
@Ian Sure .......
Matías Fidemraizer
2

J'utilise C # sur des jeux fonctionnant sur des machines XBOX et Windows, je l'utilise dans des applications Compact Framework pour des solutions robotiques, j'utilise MonoTouch pour le développement iPad, j'ai quelques applications Web fonctionnant sur Linux et quelques autres solutions. Habituellement, il existe un moyen de faire votre chose sur une plate-forme donnée. La couche centrale est à peu près la même pour la plupart d'entre eux (étude de cas nécessaire en effet). Le problème - et je le considère comme une série - est l'environnement de développement. Je suis habitué à Visual Studio et à ses fonctionnalités. Mais MonoDevelop, par exemple, me rend fou.

scarlaxx
la source
1
Novell a récemment publié une extension VS 2010 afin que vous puissiez développer du code mono dans VS.
Morgan Herlocker