Czy istnieje różnica między struct w C++ i struct w C#?jest różnica między struct w C++ i struct w C#?
Odpowiedz
W C# używasz struktur do definiowania typów wartości (w przeciwieństwie do typów referencji zadeklarowanych przez class
es).
W C++, struct jest tym samym co klasa z domyślnym poziomem dostępu public
.
Pytanie powinno brzmieć: czy w C# są różne od klas w C++ i, tak, są: Nie można wywodzić się z C#, nie można mieć funkcji wirtualnych, nie można definiować domyślnych konstruktorów, nie masz destruktory itp.
elemencie w C# bardzo różni się od zajęć, patrz Structs vs Classes dla bardziej
elemencie w C++ są identyczne do zajęć, oprócz tego, że członkowie są publiczne domyślnie. Poza tym struktura C++ może zrobić wszystko, co potrafi klasa C++.
Struktury C# mogą mieć konstruktory - po prostu nie mogą mieć * domyślnego * konstruktora. –
Marc: Zauważyłeś mój celny błąd, dobrze. . . p.s. Naprawiłem to :) –
@Marc: Zawsze mają domyślnego konstruktora, po prostu nie możesz zdefiniować własnego :-) – MartinStettner
Tak.
elemencie w C# to zwykły stary, według wartości, typy danych (w przeciwieństwie do klas, które są przez odniesienie i mają ll rzeczy OO)
elemencie w C++ są tylko klasy, które są publiczne domyślnie.
Czy próbujesz współdziałać między zarządzanymi C++ i C#? Jeśli tak, są rozszerzenia do C++, aby to umożliwić: zobacz link
Kod C# jest kodem zarządzanym, który zostanie zwolniony przez C# śmieci, gdy nikt już go nie odwoła. Jego destruktor jest wywoływany za każdym razem, gdy śmieciarz postanawia go wyczyścić.
Struktura C++ to obiekt niezarządzany, który należy oczyścić. Jego destruktor jest wywoływany w sposób przewidywalny, gdy go usuniesz lub wykracza poza zakres.
Struktury C# nie są obiektami; nie są * same * podlegają zbędnemu oczyszczaniu (chyba że są polami w typie, który * jest * zbiorem śmieci, tj. klasą). Struktury C# nie mogą zdefiniować finalizatora: "Błąd 1 Tylko typy klas mogą zawierać destruktory" –
Dobra strona o finalizatorze. Ale structs są obiektami, które moim zdaniem: "MyStruct is object" zwraca true. I ktoś musi uwolnić pamięć, której używa struct; garbage collector to zrobi, jeśli struktura jest na stercie. – Andomar
- 1. Struct marszałek w C#
- 2. Jaka jest różnica między struct addrinfo a struct sockaddr
- 3. Struct Constructor w C++?
- 4. Jaka jest różnica między Vec <struct> a & [struct]?
- 5. struct wyrównanie C/C++
- 6. Jaka jest różnica między BaseAddress i AllocationBase w MEMORY_BASIC_INFORMATION struct?
- 7. Różnica między "struct foo *" i "foo *" gdzie foo jest strukturą?
- 8. bezpośrednie inicjalizacji struct w C
- 9. Błąd magistrali w C struct
- 10. C++ Klasa lub Struct kompatybilność z C struct
- 11. Cryptic definicja struct w C
- 12. Dziedziczenie C++ Struct w Cython
- 13. marszałka C++ tablicy struct w C#
- 14. Definiowanie naprzód deklarowaną C-struct jak C++ - struct
- 15. C tablice struct
- 16. C++ struct tm & time_t
- 17. Konwersja C++ C# struct do
- 18. C inicjalizacji ++ struct
- 19. C++ initialize anonimowy struct
- 20. Struct C# Generic Konstruktor
- 21. funkcja dla C++ struct
- 22. Struct X w Struct X?
- 23. Jaka jest różnica między `typedef struct X {}` a `typedef struct {} X`?
- 24. C układ pamięci typu struct?
- 25. Jak poprawnie zainicjować C struct z C++?
- 26. struct i klasa i dziedziczenie (C++)
- 27. Tablice wielowymiarowe w struct w C#
- 28. Sens "tego" dla struct (C#)
- 29. Deklarowanie prototypu typu "struct" - C
- 30. niezdefiniowany C struct naprzód deklaracja
Punkt Martina dotyczący struktur C#, będących typami wartości, ma duże znaczenie dla wydajności, ponieważ w przypadku niektórych operacji muszą one być zapakowane w pudełka i rozpakowane. Przeczytaj "boks", jeśli musisz martwić się wydajnością. – dss539