C# i .NET framework

0

Dzień dobry,
jestem początkujący z C#. Jako, że wcześniej miałem bardzo dużą styczność z C++, robiłem proste gry i programy, to nauka C# poszła mi całkiem szybko. Teraz chciałbym wyjść z tej konsoli, więc zacząłem przeglądać dostępne frameworki, żeby zacząć robić proste aplikacje desktopowe. Jednak podczas tych wszystkich przemyśleń zaczęło nasuwać mi się jedno pytanie - przecież cały czas, pisząc programy w konsoli pisałem w C# i również .NET'cie (tak przynajmniej pisało przy tworzeniu projektu w vs). Zanim rozpocząłem naukę C# myślałem że jest to zwykły framework, jak każdy inny, typu Qt w C++. Próbowałem również przeglądać kursy dotyczące .NET framework i nie dość, że było ich naprawdę niewiele (mówie takich co zawierają w sobie np. .net course, a nie c# course) a jak już znajdowałem to były to po prostu kursy C#. To wszystko kłóci się z tym, co wcześniej myślałem. Teraz pytanie - czy mógłby mi ktoś wytłumaczyć czym dokładnie jest .NET framework i czy w jakiś sposób oferuje coś więcej niż konsola? Czy może mając w posiadanie .net można zbudować jakąś aplikację z oprawą graficzną? Przy okazji również zapytam, nie będę tworzył osobnego wątku. Jakie frameworki do C# polecacie, żeby tworzyć fajne aplikacje desktopowe (nie webowe)? Z góry dziękuję bardzo za każdą odpowiedź, wiem że może trochę wydawać się mega głupie, ale wolę mieć wszystko jasne. Pozdrawiam

7

Cały .NET Framework to, jak sam piszesz, całe środowisko z CLR, na którym są wykonywane programy. C# jo najpopularniejszy język, chociaż, jak sam zauważyłeś, nie jedyny. Popularność jest powodem, dlaczego większość opisów jest oparta na C#, jednak w innych językach wszystko będzie tak samo, choćby w przypadku VB.NET.

Jedna z podstawowych różnic w stosunku do C++ i Qt jest fakt, że w przypadku C++ aplikację kompilujesz do kodu maszynowego i działa tylko w jednym systemie operacyjnym na jednym rodzaju procesora. W przypadku .NET raz skompilowana aplikacja może działać na każdym systemie z zainstalowanym .NET lub Mono. Jest to podejście bardzo podobne do Java.

Są generalnie 3 graficzne biblioteki do aplikacji desktopowych, w tym 2 od Microsoftu (w przypadku .NET < 5.0 i Mono, nie wiem, jak w przypadku Core i .NET >=5.0):

  1. WinForms - przez niektórych uznany za przestarzały, jednak w większości przypadków można zrobić całkiem rozbudowaną aplikację. Natywnie działa w Windows, w Linux i macOS też, ale nie jest w pełni kompatybilny (jednak zdecydowana większość elementów działa poprawnie). Dla początkującego jest bardzo dobry.
  2. WPF - następca Winforms, ma zdecydowanie większe możliwości i inne podejście, ale działa tylko i wyłącznie na Windows, nie przewiduje się obsługi WPF na innych systemach.
  3. GTK# - biblioteka utworzona przez Novel, a potem Xamarin, oparta na GTK+. W Linux i macOS wspierana od razu po zainstalowaniu Mono. Działa bardzo dobrze na wszystkich systemach, jednak w przypadku Windows wymaga doinstalowania biblioteki GTK#, sam .NET tego nie zapewnia.

Visual Studio wspiera WinForms i WPF, do Windows jest też jest darmowy SharpDevelop (od kilku lat już nie rozwijany, jednak do większości zastosowań wystarczy i nie jest tak "ciężki", jak Visual Studio) wspiera WinForms, a MonoDevelop lub Xamarin Studio wspiera GTK#.

Ja osobiście bym polecał WinForms lub GTK# w zależności, czy głównie pracujesz na Windows, czy na Linux. WPF do prostych aplikacji to trochę armata na muchę.

0

@andrzejlisek: Dziękuję bardzo za odpowiedź. Będę jeszcze myślał nad tym, co wybrać na początek, ale rozjaśnił mi Pan wszystko, co niezmiernie ułatwiło sprawę. Pracuję na windowsie, więc prawdopodobnie wybiorę WinForms. Jeszcze raz bardzo dziękuję i pozdrawiam

0

Jesli nie masz dobrych powodow to nie idź w WinForms. Ja siedze w WinForma ale ja mam niszę w przemysle.
WebApi, Blazor, MVC albo WPF jeśli jesteś masochista i lubisz UI w XMLu.

1
jacek.placek napisał(a):

Jesli nie masz dobrych powodow to nie idź w WinForms. Ja siedze w WinForma ale ja mam niszę w przemysle.

WebApi, Blazor, MVC albo WPF jeśli jesteś masochista i lubisz UI w XMLu.

W takim razie co proponujesz do aplikacji desktopowej (bo o takie jest pytanie)? Odradzasz WinForms, a zaraz potem, poprzez stwierdzenie WPF jeśli jesteś masochista, mówiąc niewprost odradzasz WPF. GTK# jest mało znany, więc pomińmy, zostaje WinForms vs. WPF.

WebApi i Blazor jest do aplikacji webowych, więc to już inny temat.

0

Ja na Windows pisze w WinForms ale programy gadające z maszynami w przemyśle, RFIDy, porty szeregowe, komputery przy maszynach itp.
Gdybym teraz zaczynał to web i mobilne.
Ja mam awersje do WPFa ale może Ci się spodoba :)
Desktopowe to tylko z dodatkami Teleric albo DevExpress. Szczególnie na WinForms. Syncfusion jest chyba bezpłatny dla małych firm ale mi się nie podoba.

0
bakunet napisał(a):

.NET Framework nie jest już rozwijany. Czy jest jakiś powód że chcesz korzystać z niego? Osobiście bym polecił przeniesienie się na .NET Core. Tak samo WebForms i WinForms odchodzą do lamusa na rzecz ASP.NET i WPF. Chyba nawet WPF jest już w Core.

Ja z wielką chęcią przerzucę się na .NET Core, tyle, że ja na co dzień używam Linux. Czy już jest oficjalne i darmowe środowisko programistyczne do Linux (podkreślam, że chodzi mi o IDE, a nie rozbudowany notatnik z kolorowaniem składni)? Już nawet dyskutowałem o tym Uruchomienie .NET Core lub .NET 5 , nic konkretnego z tego nie wyszło, a o .NET 6.0 dowiedziałem się w momencie, jak na forum pojawił się temat z nim związany. Może w chwili wypuszczenia .NET 6.0 coś się zmieniło?

A rozważanie, czy lepiej ASP.NET, czy WinForms, jest jak porównywanie autobusu z samolotem. Pomimo, że jedno i drugie służy do przewozu ludzi, to jednak działa na zupełnie innej zasadzie, w pewnych sytuacjach lepszy jest autobus, a w innych lepszy jest samolot.

0

Blazor-Server może spokojnie działać jako aplikacja desktopowa, uruchamiana lokalnie - wystarczy przypiąć sobie skrót (chrome ładnie wykrywa i od razu chce instalować takie aplikacje, "odłacząjąc" je od przeglądarki).

1

.net to nie tylkomaszyna CLR, ale także biblioteka standardowa, która zawiera gotowe klasy narzędziowe. C# to sam język, jak C++(jest jego wersja pracująca na CLR) czy VisualBasic. Można używać .net pracującego na innej niż CLR maszynie. Podobne półprawdy są z WinForms - WPF - nie to nie jest następca. Te technologie wychodziły w podobnym czasie i nie są następcami, a alternatywą. W WPF mamy 1 okno i całość jest rysowana przez WPF, w XAML projektujesz widok. WinForms nadal opiera się na oknach (tak np. przycisk to też okno - od tego nazwa systemu - wszystko jest oknem i ma swoje HWND - czyli uchwyt). Tutaj i tutaj nieco inaczej się pracuje. Osobiście pisałem w jednymi drugim. Sądzę, że do typowych desktopowych interfaców WinForms nadaje się idealnie. .NET Core nie jest nastawiony na GUI i nie ma obecnie żadnej alternatywy wspieranej przez MS. Jest AvalonUI, ale nie jest to oficjalne narzędzie. .NET Core przystosowane jest do pracy serwerowej na Windowsie i Linuksie, przy czym praca developerska jest przewidziana na Windowsie i MacOS - tutaj rozwijane są środowiska programistyczne.

0

@andrzejlisek: Ja usunąłem swój poprzedni post bo doczytałem później że OP jest tylko zainteresowany aplikacjami na desktop, tak na marginesie :)

Czy już jest oficjalne i darmowe środowisko programistyczne do Linux - wnioskuję, że VS Code Cię nie interesuje?

Niestety Twój link nie działa: https://4programmers.net/Forum/C_i.NET/349150-uruchomienie_net_core_lub_net_5

1
bakunet napisał(a):

Czy już jest oficjalne i darmowe środowisko programistyczne do Linux - wnioskuję, że VS Code Cię nie interesuje?

Skąd bierze się takie powszechne uwielbienie tego programu i traktowanie go jako IDE, pomimo, że nim nie jest? Sprawdziłem go i w nim nawet nie ma czegoś takiego, jak "project". To jest program taki sam, jak Notepad++, Notepad2, Kate, Gedit, czyli notatnik z kolorowaniem składni języków programowania i możliwością jednoczesnego otwarcia wielu plików, nic więcej. A funkcja "nowy plik" to jest tylko utworzenie nowego pliku tak samo, jak w wymienionych notatnikach. A to, co jest w menu "Run" kojarzy się z IDE, a i tak nic nie działa i nie ma zastosowania.

Z takim tokiem myślenia równie dobrze mógłbym programować za pomocą Notepad++, na jedno wyjdzie, skoro sam projekt i konfigurację przeprowadza się poleceniami z konsoli lub poprzez ręczną edycję plików konfiguracji. Czy o to Tobie chodzi?

Właśnie wobec powyższego stwierdzam, że VS Code mnie nie interesuje, ale zmienię zdanie, jak ktoś przekona mnie, że jestem w błędzie i to jest IDE, co nie zmienia faktu, że nim nie jest na pierwszy rzut oka. Nie po to do niemal każdego języka czy kompilatora jest IDE (o to nie jedno), żeby męczyć się z ręczną edycją plików. To, tak jakbym zrezygnował z Visual Studio, MonoDevelop i NetBeans na rzecz zwykłego notatnika. Da się, ale po co mam się męczyć?

bakunet napisał(a):

Niestety Twój link nie działa: https://4programmers.net/Forum/C_i.NET/349150-uruchomienie_net_core_lub_net_5

Zacytowany link sprawdziłem i faktycznie nie działa, nie wiem, dlaczego źle się wkleił. Sprawdziłem link w swoim poście i jakimś cudem on działa.

2

Skąd bierze się takie powszechne uwielbienie tego programu i traktowanie go jako IDE

No IDE to może i nie jest ale jest przyjemny w klepaniu kodu w różnych językach, czy jak to młodzież mawia, technologiach :)
Do WEB-a czy Fluttera jest wystarczający.

1

VSCode to jest bardzo rozbudowany edytor, rzeczywiście - raczej bym go (w wersji gołej) nie traktował jako pełnoprawnego IDE.

Ale posiada także 16 milardów pluginów i rozszerzeń, które już naprawdę robią robotę.
Chociażby - jak bawisz się tematami typu Arduino czy ESP32, to dokładasz sobie Platformio - https://platformio.org/ i masz super rozwiązanie do tematów embedded. I z tym dodatkiem masz praktycznie IDE, możesz zrobić to, o czym piszesz powyżej, że się nie da - Run nie działa i nie ma zastosowania. Dzięki temu dodatkowi puszczasz kompilację, a potem automatyczny upload programu do płytki.

Do WEB-a czy Fluttera jest wystarczający.

Tutaj akurat ja mam inaczej:

  • WEB: Netbeans
  • Flutter: Android Studio
0

@andrzejlisek: Nie miałem zamiaru nikogo przekonywać do VS Code, tylko chciałem poznać Twoje zdanie.

Sam staram się go unikać na rzecz VS Enterprise. VS Code używam jedynie dla Angulara i TS. Myślę jeszcze o Pythonie, może będzie mi w nim wygodniej, ale pod .NET nie widzę alternatywy dla VS Enterprise.

1

Tylko księgowi, którzy nie chcą płacić za VS Pro czy Ent twierdzą, że VS Code to pełnoprawne IDE ;p

1

@bakunet: No i ja swoje zdanie wyraziłem, oczywiście masz prawo mieć odmienne zdanie. Dodam jeszcze, że do Pythona, PHP, czy JavaScript, czyli do języków, których z założenia nie kompiluje się, lub ewentualnie ma się przygotowany skrypt kompilujący i przygotowujący (np. wgranie programu do mikrokontrolera, wysłanie strony internetowej na serwer), a więc TypeScript lub C również, chociaż nie ma Intelisense, ale w takich zastosowaniach bez niego się obejdzie, to taki VS Code do tych zastosowań byłby super, tak samo, jak każdy notatnik z kolorowaniem składni.

@pieczarek: Pomiędzy nimi jest VS Community, o którym pewnie księgowy zapomina, a jest za darmo będąc jednocześnie pełnoprawnym IDE do C#/.NET, o możliwościach wystarczających w 95% zastosowań.

0

@andrzejlisek: znów piszesz nieprawdę. VC Community jest darmowy tylko w ograniczonym zakresie... bardzo startupowym (ale realnie pracować sie da, w przeciwieństwie do propozycji Idery). Prawdziwe firmy się nie łapią.

Licensing:
A) If you're an individual developer (no enterprise, no organization), no difference (AFAIK), you can use CommunityEdition like you'd use the paid edition (as long as you don't do subcontracting)
B) You can use CommunityEdition freely for OpenSource (OSI) projects
C) If you're an educational insitution, you can use CommunityEdition freely (for education/classroom use)
D) If you're an enterprise with 250 PCs or users or more than one million US dollars in revenue (including subsidiaries), you are NOT ALLOWED to use CommunityEdition.
E) If you're not an enterprise as defined above, and don't do OSI or education, but are an "enterprise"/organization, with 5 or less concurrent (VS) developers, you can use VS Community freely (but only if you're the owner of the software and sell it, not if you're a subcontractor creating software for a larger enterprise, software which in the end the enterprise will own), otherwise you need a paid edition.

https://stackoverflow.com/questions/30285135/whats-the-difference-between-visual-studio-community-and-other-paid-versions/37983606

2
andrzejlisek napisał(a):

Skąd bierze się takie powszechne uwielbienie tego programu i traktowanie go jako IDE, pomimo, że nim nie jest? Sprawdziłem go i w nim nawet nie ma czegoś takiego, jak "project". To jest program taki sam, jak Notepad++, Notepad2, Kate, Gedit, czyli notatnik z kolorowaniem składni języków programowania i możliwością jednoczesnego otwarcia wielu plików, nic więcej. A funkcja "nowy plik" to jest tylko utworzenie nowego pliku tak samo, jak w wymienionych notatnikach. A to, co jest w menu "Run" kojarzy się z IDE, a i tak nic nie działa i nie ma zastosowania.

Bo jak zainstalujesz wtyczkę: https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp to masz IDE do C#. Z refaktoryzacją, nawigacją, debuggerem, itd. Na dodatek znacznie lżejsze niż zwykłe VS, które jest dość ociężałe i zawiera milion funkcji niepotrzebnych do pisania logiki aplikacji lub backendowych API.

0

Ostatnio dość często korzystam z VS Code. Projekt w którym pracuję jest podzielony na wiele repozytoriów i o wiele wygodniej jest commitować i pushować do każdego w jednym momencie niż przełączać się co chwilę pomiędzy oknami albo przeładowywać projekty w VS czy Riderze. Jeśli muszę wyszukać coś rozrzuconego po projektach to też jest to wygodniej robić w code bo otwieram folder i robię co chcę. Działa to szybko i wygodnie. Jak mam coś małego do zrobienia to robię to w Code.

1 użytkowników online, w tym zalogowanych: 0, gości: 1