2009-05-18 16 views

Odpowiedz

20

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.

+1

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

11

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++.

+2

Struktury C# mogą mieć konstruktory - po prostu nie mogą mieć * domyślnego * konstruktora. –

+0

Marc: Zauważyłeś mój celny błąd, dobrze. . . p.s. Naprawiłem to :) –

+0

@Marc: Zawsze mają domyślnego konstruktora, po prostu nie możesz zdefiniować własnego :-) – MartinStettner

0

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.

0

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

0

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.

+0

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" –

+0

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