Là c # thực sự là một ngôn ngữ đa nền tảng?


20

C # (và nền tảng .net nói chung) có vẻ như nó đang trở thành một tùy chọn tốt cho các ứng dụng đa mục tiêu:

  • Khung MS .net chính thức: phát triển toàn bộ cửa sổ, dev asp.net, Windows phone Dev, v.v.
  • mono và tất cả các dẫn xuất của nó: monotouch, monodroid: phần còn lại của thế giới. Công cụ này là RTM ngày nay.

  • Điều đó có nghĩa là C # đang trở thành một ngôn ngữ tốt để nhắm mục tiêu các nền tảng phổ biến nhất: máy tính để bàn, web và thiết bị di động?

  • Có còn tốt hơn khi sử dụng ngôn ngữ "bản địa" của các nền tảng đích (mục tiêu C, Java, v.v.)
  • Có phải nó chỉ là một màn khói và chỉ ngôn ngữ tiếp thị?

Xin lưu ý rằng tôi thực sự có ý thức Tôi sẽ không thể sao chép / dán mã giữa các nền tảng. Nhưng tôi chắc chắn rằng các lớp ứng dụng thấp hơn (mô hình, doanh nghiệp, v.v.) có thể được sử dụng lại, nhưng tôi biết tôi sẽ phải điều chỉnh các lớp cao hơn (Gui, v.v.) cho nền tảng. Mục tiêu của tôi tập trung vào các kỹ năng cần thiết hơn là chia sẻ mã kỹ thuật.

[sửa] Tôi nhà phát triển ac # trong một công ty sử dụng ồ ạt c #. Đó là lý do tại sao tôi đã nói về c # trong kế hoạch mở rộng phạm vi nền tảng mục tiêu trong công ty của tôi.

Câu trả lời:


12

Vâng, nói chung, .NET Framework rất phù hợp cho các ứng dụng nhắm mục tiêu đến nhiều loại thiết bị. Nhưng điều này không phải là duy nhất đối với .NET; Java đã làm điều đó từ lâu trước đây. Điều cần lưu ý là không có công cụ thay thế thực sự cho các công cụ gốc cho một nền tảng cụ thể.

Các ứng dụng Mac mà bạn tạo bằng .NET sẽ không bao giờ giống như các ứng dụng Mac OS X gốc và đó được coi là một vấn đề của đại đa số người dùng OS X. Điều đó có thể không quan trọng đối với bạn về mặt chiến lược, tùy thuộc vào việc liệu mô hình kinh doanh của bạn có tối đa hóa độ bão hòa trên mức tối đa hóa sự hài lòng của người dùng hay không, nhưng chắc chắn đó là điều cần lưu ý khi đưa ra lựa chọn.

Các hệ thống GUI trong Linux và Windows có phần linh hoạt hơn về mặt ứng dụng trông "nguyên bản" và phù hợp với nền tảng này. Nhưng tôi đổ lỗi rằng chủ yếu là do thiếu các hướng dẫn giao diện rõ ràng và thực tế là các nhà phát triển ứng dụng trong lịch sử đã sẵn sàng bỏ qua những cái tồn tại. Nhiều người dùng Mac thích Mac chính xác giao diện người dùng nhất quán của nó.

Xem xét rằng bạn sẽ phải điều chỉnh lớp GUI cho nền tảng cụ thể (và có thể viết lại hoàn toàn bằng một ngôn ngữ khác, chẳng hạn như Objective-C), khiến bạn chỉ sử dụng nền tảng .NET cho mã thư viện. Và theo tôi thì không có một chiến thắng rõ ràng nào cho C # so với C ++.

Để phát triển ứng dụng nhanh chóng, có một vài lựa chọn thay thế tốt hơn C # và .NET. Và đẩy một ứng dụng ra một cách nhanh chóng và có sẵn nó ngay lập tức trên một loạt các nền tảng chắc chắn là một lợi thế kinh doanh. Nhưng đối với các ứng dụng đa nền tảng thực sự nhằm mục đích thực sự làm hài lòng người dùng, đó không nhất thiết là giải pháp viên đạn bạc.


9
"Các ứng dụng Mac mà bạn tạo bằng .NET sẽ không bao giờ giống như các ứng dụng Mac OS X gốc, ...". Hãy để tôi giới thiệu bạn với MonoMac: mono-project.com/MonoMac

3
@Dimitris: Tốt nhất hãy nói rằng tôi đang hoài nghi. Những người Qt đã thử điều này, và mọi người vẫn nhảy lên nhảy xuống về việc họ đã đạt được nó. Họ đã sai: họ không có. Các ứng dụng Qt trông không giống các ứng dụng OS X gốc. Họ chỉ ... sai. Tôi không thấy bất kỳ ảnh chụp màn hình nào trong liên kết mà bạn đề xuất, nhưng ngay cả khi chúng có giao diện người dùng hoàn hảo, chúng vẫn sẽ thiếu tất cả các chi tiết về hành vi và triển khai. Cảm ơn đã tham khảo, mặc dù. Đó là một cái gì đó để lạc quan về.
Cody Grey

7
@Cody Grey: MonoMac trông và hoạt động tự nhiên vì nó không phải là API đa nền tảng, mà thay vào đó, nó hoàn toàn bao bọc API API bên dưới. Nó trông và hành động bản địa vì nó là bản địa.

1
@Cody Grey: MonoMac dành cho Mac, MonoTouch dành cho iOS. Bạn có thể viết các ứng dụng gốc, bạn chỉ cần sử dụng C # thay vì Obj-C. Nó không phải là "làm cho WinForms hoặc Gtk trông tốt trên Mac".

2
Tôi chỉ muốn tham gia vào cuộc trò chuyện ở trên vì tôi đang ở giữa việc xây dựng một hệ thống bao gồm iPad & Windows Phone, ASP.NET MVC3 và NT Services giao tiếp với hệ thống điều khiển robot. Mono, MonoDroid, MonoTouch, v.v., như Cody đã chỉ ra ở trên, là một cách để viết mã bằng C # cho phép bạn tận dụng sức mạnh của C # và .NET Framework (bao gồm cả Linq) trong khi cũng có quyền truy cập không bị chặn vào API "gốc" của nền tảng đã chọn ... đồng thời tránh được nhiều vấn đề quản lý bộ nhớ vốn có đối với hầu hết mã C / C ++ / ObjC gốc.
Richard Turner

6

Microsoft .NET là triển khai CLR, DLR, BCL, CLI và CLS chính thức. Các công ty, nhóm, cộng đồng hoặc nhóm làm việc khác không liên kết với Microsoft theo cách mà những công ty này có thể có triển khai 1: 1 của phiên bản ngôn ngữ và khung mới nhất.

Về cơ bản, bạn cần xem lại các tính năng ngôn ngữ và khung nào bạn muốn tận dụng trong một dự án cụ thể và kiểm tra xem những thứ này có trong các triển khai .NET không chính thức hay không.

Nếu bạn đang mong đợi một giải pháp biên dịch một lần và phân phối ở mọi nơi, thì bạn đã nhầm: bạn cần thực hiện một nghiên cứu điển hình.


Đó là rất nhiều TLA !
Tamlyn

@tamlyn yeah hahahaha
Matías Fidemraizer 13/07/2015

Bây giờ rất nhiều .NET là nguồn mở, mọi thứ đã thay đổi ....
Ian

@Ian Chắc chắn .......
Matías Fidemraizer

2

Tôi sử dụng C # trên các trò chơi chạy trên máy XBOX và Windows, tôi sử dụng nó trong các ứng dụng Compact Framework cho các giải pháp robot, tôi sử dụng MonoTouch để phát triển iPad, tôi có một số ứng dụng web chạy trên Linux và một số giải pháp khác. Thông thường có một cách để làm điều của bạn trên một nền tảng nhất định. Lớp lõi là giống nhau cho hầu hết trong số họ (thực sự cần nghiên cứu trường hợp). Vấn đề - và tôi coi nó như một loạt - là môi trường phát triển. Tôi đã quen với Visual Studio và các tính năng của nó. Nhưng ví dụ MonoDevelop khiến tôi phát điên.


1
Novell gần đây đã phát hành một phần mở rộng VS 2010 để bạn có thể phát triển mã Mono trong VS.
Morgan Herlocker
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.