2009-04-22 7 views
5

Hãy nói rằng chỉ vì niềm vui của nó, tôi quyết định rằng tôi không muốn viết các ứng dụng máy tính để bàn trong Java nữa, thay vào đó muốn chuyển sang sử dụng C#. Tôi muốn có thể xây dựng một ứng dụng sẽ chạy trên một số bản phân phối Linux chính thống và một bản phát hành gần đây của MS Windows. Nó sẽ có một thành phần GUI.Có khung giao diện đa nền tảng cho C# /. NET không?

Trong Java, tôi có thể xây dựng một ứng dụng sử dụng Swing. Khi tôi đã làm việc, tôi có thể sao chép tệp jar đó từ Windows sang Linux hoặc ngược lại, tùy thuộc vào nơi tôi đã phát triển nó. Và nó thường sẽ chạy với java -jar myapp.jar.

Trong C# có thể thực hiện việc này không? Có một chức năng tương đương với Swing hoặc AWT trong C#?

+1

Bạn có thể thử tháng mười một: https://www.nevron.com/products-open-vision.aspx. Nó có chức năng tương đương với Swing –

Trả lời

2

Bạn có thể thử WxWidgets. Nó có hỗ trợ cho C#, trong số nhiều ngôn ngữ khác, và là nền tảng chéo. Nhược điểm duy nhất là một biên dịch lại cho mỗi nền tảng. Ngoài ra, bạn có thể thử Mono là rất tốt, nhưng hãy cẩn thận có một vài snags với các vấn đề tương thích. Không có tệp "chạy bất cứ nơi nào" được xác định trước cho các ứng dụng C# như Java có với các lọ, tuy nhiên, tốt nhất bạn nên đặt lại là biên dịch lại cho mỗi nền tảng nếu bạn muốn đảm bảo khả năng tương thích.

2

Điều gần nhất mà tôi từng thấy là Mono - mặc dù nó không hỗ trợ tất cả các thư viện CLR mà tôi tin, nhưng nó là nền tảng đa nền tảng.

5

Tôi tin rằng một phần tốt của WinForms được triển khai trong Mono. Bạn cần phải cài đặt Mono dưới Linux cho điều đó. Tuy nhiên, bạn có thể gặp sự cố về tính tương thích, vì Mono không phải là nỗ lực của Microsoft và không được chính thức hỗ trợ bởi chúng.

+3

Có, nhưng nó là một nỗ lực cộng đồng * rất tốt, và tôi chỉ thấy các vấn đề tương thích khi tôi làm điều gì đó hoàn toàn vô lý (chú thích quá ngắn để mô tả: D). Lập trình máy tính để bàn thông thường thường là tốt. –

+0

@ person-b, tôi đồng ý, nó là một nỗ lực cộng đồng rất tốt :-) –

+2

Theo như tôi biết tất cả các WinForms 2.0 được thực hiện. –

13

Có lẽ GTK# sẽ là gần nhất.

Tôi biết những người khác đã nói đơn âm, nhưng điều đó không hoàn toàn đúng. .Net là mono như máy ảo Java của Microsoft là thời gian chạy Java của Sun. mono không thực sự trong không gian khái niệm giống như Swing. Đối với điều đó, GTK # là một kết hợp gần hơn.

+2

Tôi biết những gì bạn đang nói, trong câu hỏi của ông, ông hỏi về AWT hoặc Swing - nhưng những gì tôi nghĩ rằng ông thực sự yêu cầu là "làm thế nào tôi có thể viết các ứng dụng C# đa nền tảng?". –

5

This page có danh sách các bộ công cụ GUI được Mono hỗ trợ, bao gồm các ưu và nhược điểm cho từng loại. Như những người khác đã đề xuất, WinForms, GTK # và wxNet là tất cả các tùy chọn khả thi.

0

Windows.Forms là thư viện tiêu chuẩn cho việc phát triển các ứng dụng GUI cho .NET

Mặc dù được hỗ trợ rất tốt trên Windows, phiên bản 2.0 được thực hiện hoàn toàn bởi Mono quá, mà làm cho nó có sẵn trên tất cả các nền tảng được hỗ trợ bởi Mono .

WPF mặt khác là thư viện khái niệm mới, hiện tại nó được hỗ trợ đầy đủ chủ yếu trên Windows và chỉ một tập hợp con được hỗ trợ bởi Mono bằng cách thực hiện Silverlight của họ - Ánh trăng.

Nếu bạn đang xây dựng ứng dụng để sử dụng đa nền tảng hiệu quả và/hoặc có các ràng buộc về hiệu suất bảo thủ, hãy đi Windows Forms.

Nếu bạn muốn thử nghiệm và tìm hiểu điều gì đó mới hoặc nếu bạn đang phát triển ứng dụng mới cho Windows, hãy truy cập WPF. Đây là công nghệ mới cho các ứng dụng GUI của khách hàng.

+0

Mono không thể chạy Windows.Forms trên Linus hoặc Mac kể từ Windows.Forms phụ thuộc vào các cuộc gọi API Win32. –

16

Eto.Forms (trên github), mà là một lớp trừu tượng trên đầu trang của WPF, WinForms, GTKMonoMac/Cocoa - vì vậy bạn có thể nhận được một giao diện người dùng tự nhiên trên tất cả các nền tảng mà không cần phải để triển khai lại cho từng nền tảng.Bạn không phải chịu đựng mẫu số chung thấp nhất, vì bạn có thể thực hiện các chi tiết cụ thể cho mỗi nền tảng (nếu muốn, nhưng không bắt buộc).

Có lợi thế là thuần khiết .NET và chỉ dựa vào các phụ thuộc do OS cung cấp, thay vì sử dụng GTK hoặc WxWidgets nơi bạn phải gói các tệp nhị phân gốc cho các nền tảng khác nhau.

+0

Xin chào! Tôi có thể sử dụng Eto.Forms với Gtk # trên Windows không? Cảm ơn! –

+0

@ user2656632 có, bạn chắc chắn có thể. Chỉ cần vượt qua nền tảng thích hợp để xây dựng Eto.Forms.Application. (; – Curtis

2

Đối với iOS, Android và Windows Mobile, có Xamarin.Forms. http://xamarin.com/forms Đây là một lớp trừu tượng cho phép bạn viết mã đa nền tảng, liên kết với các bộ công cụ GUI bản địa dưới mui xe.

Tôi đang tìm kiếm các giải pháp như thế này - tôi quan tâm không chỉ về nền tảng di động, mà còn các nền tảng máy tính để bàn (Windows, Mac OSX, fedora/ubuntu/etc linux)

3

Đây là một câu hỏi cũ, nhưng như bản cập nhật, sự kết hợp giữa Mono và Xamarin sẽ hoạt động cho nhu cầu đa nền tảng hiện đại của bạn.

http://www.mono-project.com/docs/gui/winforms/

Microsoft đã chỉ mã nguồn mở .NET và được cam kết đưa lõi NET sang Linux và MacOS với phiên bản tiếp theo của họ. Microsoft cũng đã hợp tác chặt chẽ với Mono và Xamarin, đặc biệt để trợ giúp với các thư viện Android và Linux của họ.

http://www.hanselman.com/blog/AnnouncingNET2015NETAsOpenSourceNETOnMacAndLinuxAndVisualStudioCommunity.aspx