Najważniejszą różnicą między klasą a strukturą jest to, że klasa jest typem referencyjnym, podczas gdy struct to typ wartości, a ich przydział w pamięci jest inny.
Czym jest klasa?
klasa, fundamentalna koncepcja w programowaniu obiektowym, to rodzaj niestandardowej struktury danych, która zazwyczaj zawiera pola, atrybuty, metody, atrybuty, konstruktory, indeksery, operatory itd. W .NET wszystkie klasy ostatecznie dziedziczą klasę System.Object, więc są typem referencyjnym, czyli gdy nowotworzysz instancję klasy, adres tej instancji w zarządzanym stosie jest przechowywany na stosie, a wartość instancji w stercie zarządzanym.
Czym jest struktura?
Struktura to typ wartości używany do organizacji zestawu powiązanych zmiennych w jedną jednostkę zmienną. Wszystkie struktury są dziedziczone z klasy System.ValueType, więc są typem wartości, tzn. instancja struktury jest tworzona na stosie, do którego przypisany jest wątek, i sama przechowuje tę wartość. Dlatego używając struktury, możemy traktować ją jako podstawową klasę typów, taką jak int i char.
1. klasa to typ odniesienia, a struktury to typ wartości
Ponieważ klasa jest typem odniesienia, klasę można ustawić na null. Ale nie możemy uczynić struktury null, bo to typ wartości.
2. Gdy instancjonujesz klasę, zostanie ona utworzona na stercie. I instancjonujesz strukturę, która zostanie utworzona na stosie
3. Używasz odniesienia do instancji klasy. I nie używasz odniesienia do konstrukcji. (zamiast tego używać ich bezpośrednio)
4. Gdy przekazujemy klasę jako argument do metody, przekazujemy referencję. Struktura przekazuje wartość, a nie referencję.
5. Struktury nie mogą mieć inicjalizatorów, klasy mogą mieć inicjalizatory.
6. Klasy mogą mieć oczywiste konstruktory bezparametrowe, ale Struktury nie mogą
7. Nowe słowo kluczowe musi zostać instancjonowane przed użyciem klasy, a Struct nie jest tego potrzebny
8. Klasa wspiera dziedziczenie i polimorfizm, Struktur nie. Uwaga: Ale Struct może implementować interfejsy tak samo jak klasy
9. Ponieważ Struct nie obsługuje dziedziczenia, jego członkowie nie mogą być modyfikowani przez chronione lub chronione Internal
10. Konstruktor Class nie musi inicjalizować wszystkich pól, a konstruktor Struct musi inicjalizować wszystkie pola
11. Klasa może zdefiniować niszczyciela, ale Struktura nie może
12. Klasa nadaje się do dużych i złożonych danych, a Struct do nowych typów, które często są używane jako połączenie niektórych danych.
Przydatne okazje: Struct ma przewagi wydajnościowe, a Class ma zalety obiektowych rozszerzeń.
Typ używany dla bazowego magazynu danych jest zaprojektowany jako typ Struktur, a typ używany do definiowania zachowania aplikacji to Klasa. Jeśli nie jesteś pewien przyszłego zastosowania tego typu, powinieneś użyć Class. |