Nejdůležitějším rozdílem mezi třídou a strukturou je, že třída je referenční typ, zatímco struct je typ hodnoty a jejich alokace v paměti je odlišná.
Co je to třída?
Class, základní pojem v objektově orientovaném programování, je typ vlastní datové struktury, která obvykle obsahuje pole, atributy, metody, atributy, konstruktory, indexery, operátory atd. V .NET všechny třídy nakonec dědí třídu System.Object, takže jsou referenčním typem, to znamená, že když novou instanci třídy vytvoříte, adresa této instance ve spravované haldě je uložena na zásobníku a hodnota instance je uložena ve spravované haldě.
Co je to struktura?
Struktura je typ hodnoty používaný k organizaci sady souvisejících proměnných do jedné entity proměnné. Všechny struktury jsou děděny z třídy System.ValueType, takže jsou typem hodnoty, tj. instance struktury je vytvořena na zásobníku, kde je vlákno přiřazeno, a sama ukládá hodnotu. Při použití struktury ji tedy můžeme považovat za základní typovou třídu, například int a char.
1. třída je referenční typ a struktury je hodnotový typ
Protože třída je referenční typ, lze třídu nastavit na null. Ale nemůžeme udělat struct null, protože je to typ hodnoty.
2. Když instancujete třídu, bude vytvořena na haldě. A vytvoříte instanci struktury, která se vytvoří na zásobníku
3. Používáte odkaz na instanci třídy. A nepoužíváte odkaz na konstrukci. (místo toho je použij přímo)
4. Když předáme class jako argument metodě, předáme referenci. Struct předává hodnotu, ne referenci.
5. Struktury nemohou mít inicializátory, třídy mohou mít inicializátory.
6. Třídy mohou mít zjevné konstruktory bez parametrů, ale Structs nemohou
7. Nové klíčové slovo musí být instancováno před použitím třídy, a Struct jej nepotřebuje
8. Třída podporuje dědičnost a polymorfismus, Struct ne. Poznámka: Ale Struct může implementovat rozhraní stejně jako třídy
9. Protože Struct nepodporuje dědičnost, její členy nelze upravovat chráněným nebo chráněným Internal
10. Konstruktor třídy nemusí inicializovat všechna pole a konstruktor Struct musí inicializovat všechna pole
11. Třída může definovat destruktora, ale Struct nemůže
12. Class je vhodná pro velká a složitá data a Struct je vhodná pro nové typy, které se často používají jako kombinace některých dat.
Vhodné příležitosti: Struct má výkonnostní výhody a Class má objektově orientované rozšíření.
Typ použitý pro základní datové úložiště je navržen jako typ Struct a typ používaný k definování chování aplikace je navržen jako Class. Pokud si nejste jisti budoucím využitím tohoto typu, měli byste použít Class. |