Róznice w składni między C++ a C#


(rgabrysiak) #1

Witam

Pisałem narazie w języku C++ i taki też mam w planach nauczania, ale ostatnio zaciekawił mnie język C#

I stąd moje pytanie czy jest jakaś duża różnica pomiędzy tymi językami

(chodzi mi głównie o składnię)

Z góry dziękuję za odpowiedź


(mktos) #2

Tak, to są zupełnie inne języki :wink:

A na serio - w C# zapomnij o #include, #define i innych poleceniach preprocesora, zapomnij o wskaźnikach i do pół obiektu odwołujesz się poprzez operator "." (zawsze, -> w ogóle nie istnieje). Inaczej też robi się referencję (słowo kluczowe out), inne są typy danych i tak dalej.

Ale za to same konstrukcje (namespace, class, try, if, pętle to są chyba takie same).


(Ryan) #3

Różnic w składni jest zbyt wiele, by je wymieniać. Kup jakąś książkę do C# (choćby i kieszonkowy podręcznik O'Reilly) i się przekonasz. C# ma pojedyncze dziedziczenie i interfejsy, klasy statyczne, obligatoryjne przestrzenie nazw, nie ma domyślnych wartości parametrów funkcji,... Są setki różnic.


(Ryan) #4

:roll: Kolega miał z pewnością na myśli partial classes. Inna sprawa, że nie jest to sama w sobie żadna nowość w stosunku do C++.


(mktos) #5

Ani to, ani to. Za bardzo mi się wcisnął alt i chodziło o pola ("pól") obiektu :smiley:

W C++ do pól (i metod) obiektu przekazanego przez wskaźnik odwołujesz się za pomocą operatora "->", a w C# nie ma takiego rozróżnienia i zawsze jest ".". I o to chodziło. Bo nawet taka mała zmiana, a może namieszać (ja osobiście bardzo nie lubię operatora "->", bo się długo pisze :wink:)

Bo nie mam pojęcia czym mogły by być pół-obiekty (partial classes to chyba inaczej się tłumaczy) :slight_smile:


(Ryan) #6

Do pól i metod obiektu wskazanego przez wskaźnik można się swobodnie odwołać kropką :wink:

(*obiekt).Metoda();

Ale mniejsza o to. Osobiście uważam, że ta "leniwa" składnia jest bronią obosieczną. Jasne, kod wygląda bardziej czytelnie, garbage collector zajmuje się zwalnianiem pamięci, ale z drugiej strony zbyt łatwo stworzyć wiele kopii obiektów i sprawić, że GC zajmie się zwalnianiem pamięci.

Przykładowo ta leniwa składnia sprawia, że każdorazowe wywołanie funkcji z parametrem będącym obiektem, tworzy kopię tego obiektu (ale nie jego danych). To, że składnia ładnie wygląda czyni C# złudnie łatwiejszym.


(GL1zdA) #7

Jeśli chodzi o różnice między C++ i C# to Pan Petzold (znany z kultowej książki o WinAPI) za darmo daje .NET Book Zero będący właśnie wstępem do C# dla programistów C/C++.