Czy język c # jest w rzeczywistości językiem wieloplatformowym?

20

C # (i ogólnie platforma .net) wygląda na to, że staje się dobrą opcją dla aplikacji do wielu celów:

  • oficjalna platforma MS .net: tworzenie pełnych ciosów w systemie Windows, dev asp.net, Windows phone Dev itp.
  • mono i wszystkie jego pochodne: monotouch, monodroid: reszta świata. Te narzędzia są dziś RTM.

  • Czy to oznacza, że ​​C # staje się dobrym językiem do kierowania na najpopularniejsze platformy: komputer, Internet i urządzenia mobilne?

  • Czy nadal lepiej jest używać „rodzimego” języka platform docelowych (cel C, Java itp.)
  • Czy to tylko ekran dymu i tylko marketingowy język?

Pamiętaj, że tak naprawdę jestem świadomy, że nie będę w stanie skopiować / wkleić kodu między platformami. Ale jestem pewien, że niższe warstwy aplikacji (modele, biznes itp.) Mogą być ponownie użyte, ale wiem, że będę musiał dostosować wyższe warstwy (Gui itp.) Do platformy. Mój cel koncentruje się bardziej na wymaganych umiejętnościach niż na dzieleniu się kodami technicznymi.

[edytuj] Jestem programistą ac # w firmie, która masowo używa c #. Dlatego mówiłem o c # w planie rozszerzenia zakresu platform docelowych w mojej firmie.

Steve B.
źródło

Odpowiedzi:

12

Tak, ogólnie. .NET Framework jest świetny dla aplikacji skierowanych do szerokiej gamy urządzeń. Ale to nie jest unikalne dla .NET; Java robiła to już dawno temu. Należy pamiętać, że nie ma prawdziwej alternatywy dla rodzimych narzędzi dla konkretnej platformy.

Aplikacje Mac tworzone za pomocą platformy .NET nigdy nie będą wyglądały jak natywne aplikacje Mac OS X, a większość użytkowników systemu OS X uważa to za problem . Może to nie być dla Ciebie ważne strategicznie, w zależności od tego, czy Twój model biznesowy ceni maksymalizację nasycenia w porównaniu do maksymalizacji satysfakcji użytkownika, ale z pewnością jest to coś, o czym należy pamiętać przy dokonywaniu wyboru.

Systemy GUI w systemach Linux i Windows są nieco bardziej elastyczne, jeśli chodzi o to, które aplikacje wyglądają „natywnie” i dobrze pasują do platformy. Ale obwiniam to głównie za brak jasnych wytycznych dotyczących interfejsu oraz fakt, że twórcy aplikacji historycznie byli skłonni zignorować te, które istnieją. Wielu użytkowników komputerów Mac preferuje komputer Mac właśnie ze względu na spójny interfejs użytkownika.

Biorąc pod uwagę, że będziesz musiał dostosować warstwę GUI do konkretnej platformy (i ewentualnie przepisać ją całkowicie w innym języku, np. Objective-C), co pozwoli ci korzystać z platformy .NET tylko do kodu biblioteki. A potem, moim zdaniem, nie jest bardzo wyraźna wygrana dla C # nad C ++.

Do szybkiego tworzenia aplikacji istnieje kilka alternatyw lepszych niż C # i .NET. A szybkie wypuszczenie aplikacji i natychmiastowe udostępnienie jej na różnych platformach jest z pewnością korzyścią biznesową. Ale w przypadku prawdziwych aplikacji wieloplatformowych, które mają naprawdę zadowolić użytkownika, niekoniecznie jest to srebrne rozwiązanie.

Cody Gray
źródło
9
„Aplikacje Mac tworzone za pomocą .NET nigdy nie będą wyglądać jak natywne aplikacje Mac OS X, ...”. Pozwól, że przedstawię Ci MonoMac: mono-project.com/MonoMac
3
@Dimitris: Powiedzmy, że jestem w najlepszym razie sceptyczny. Ludzie Qt próbowali tego, a ludzie wciąż podskakują na myśl, że to osiągnęli. Mylą się: nie zrobili tego. Aplikacje Qt nie wyglądają jak natywne aplikacje OS X. Po prostu… się mylą. Nie widzę żadnych zrzutów ekranu w sugerowanym linku, ale nawet jeśli uzyskają doskonały interfejs użytkownika, nadal będą brakować wszystkich szczegółów zachowania i implementacji. Dziękuję za referencje. To coś, co powinno być optymistyczne.
Cody Gray,
7
@Cody Gray: MonoMac wygląda i działa natywnie, ponieważ nie jest interfejsem API dla wielu platform, ale zamiast tego natywnie pakuje bazowy interfejs API kakao. Wygląda i działa natywnie, ponieważ JEST natywny.
1
@Cody Gray: MonoMac jest dla Mac tym, co MonoTouch jest dla iOS. Możesz pisać natywne aplikacje, po prostu używasz C # zamiast Obj-C. To nie „spraw, by WinForms lub Gtk wyglądały dobrze na Macu”.
2
Chciałem tylko włączyć się w powyższą rozmowę, ponieważ jestem właśnie w trakcie budowy systemu obejmującego iPada i Windows Phone, ASP.NET MVC3 i usługi NT Services współpracujące z systemem kontroli robotyki. Mono, MonoDroid, MonoTouch itp., Jak wskazał Cody powyżej, to sposób na napisanie kodu w C #, który pozwala wykorzystać moc C # i .NET Framework (w tym Linq), jednocześnie ciesząc się nieograniczonym dostępem do twojego „rodzime” interfejsy API wybranej platformy ... jednocześnie unikając wielu problemów związanych z zarządzaniem pamięcią związanych z większością natywnego kodu C / C ++ / ObjC.
Richard Turner,
6

Microsoft .NET to oficjalna implementacja CLR, DLR, BCL, CLI i CLS. Inne firmy, grupy, społeczności lub grupy robocze nie są kojarzone z Microsoftem w taki sposób, że mogą mieć implementację 1: 1 najnowszego frameworka i wersji językowej.

Zasadniczo musisz przejrzeć funkcje języka i frameworka, które chcesz wykorzystać w konkretnym projekcie i sprawdzić, czy są one obecne w nieoficjalnych implementacjach .NET.

Jeśli oczekujesz jednorazowego rozwiązania i rozpowszechniasz je wszędzie, to się mylisz: musisz zrobić studium przypadku.

Matías Fidemraizer
źródło
To dużo TLA !
Tamlyn,
@tamlyn yeah hahahaha
Matías Fidemraizer
Teraz, gdy tak wiele .NET jest open source, wszystko się zmieniło ...
Ian
@Ian Sure .......
Matías Fidemraizer,
2

Używam C # w grach działających na urządzeniach XBOX i Windows, używam go w aplikacjach Compact Framework dla rozwiązań robotyki, używam MonoTouch dla iPada, mam niektóre aplikacje internetowe działające na Linuksie i kilka innych rozwiązań. Zwykle jest sposób, jak to zrobić na danej platformie. Warstwa rdzeniowa jest prawie taka sama dla większości z nich (rzeczywiście potrzebne jest studium przypadku). Problem - i uważam, że jest to problem szeregowy - dotyczy środowiska programistycznego. Jestem przyzwyczajony do Visual Studio i jego funkcji. Ale na przykład MonoDevelop doprowadza mnie do szału.

scarlaxx
źródło
1
Firma Novell wydała niedawno rozszerzenie VS 2010, dzięki czemu można opracować kod mono w VS.
Morgan Herlocker