Den mest væsentlige forskel mellem klasse og struct er, at klasse er en referencetype, mens struct er en værditype, og deres tildeling i hukommelsen er forskellig.
Hvad er klasse?
klasse, et grundlæggende begreb inden for objektorienteret programmering, er en type brugerdefineret datastruktur, der typisk indeholder felter, attributter, metoder, attributter, konstruktører, indeksere, operatorer osv. I .NET arver alle klasser i sidste ende fra System.Object-klassen, så de er en referencetype, det vil sige, når du kender en instans af en klasse, gemmes adressen på den pågældende instans i managed heap på stakken, og værdien af instansen gemmes i managed heap.
Hvad er en struct?
En struct er en værditype, der bruges til at organisere et sæt relaterede variable i en enkelt variabelenhed. Alle strukturer arves fra System.ValueType-klassen, så de er en værditype, dvs. strukturinstansen oprettes på den stak, hvor tråden er tildelt, og den gemmer selve værdien. Så når vi bruger struct, kan vi behandle det som en grundlæggende typeklasse såsom int og char.
1. klasse er referencetypen, og structs er værditypen
Da klasse er en referencetype, kan klassen sættes til null. Men vi kan ikke gøre struct null, fordi det er en værditype.
2. Når du instansierer en klasse, vil den blive oprettet på heap'en. Og du instansierer en struct, som vil blive skabt på stacken
3. Du bruger en reference til en klasseinstans. Og du bruger ikke en reference til en struct. (brug dem i stedet direkte)
4. Når vi består klasse som et argument til en metode, sender vi en reference. Struct sender en værdi, ikke en reference.
5. Structs kan ikke have initializere, klasser kan have initializers.
6. Klasser kan have åbenlyse parameterløse konstruktører, men Structs kan ikke
7. Det nye nøgleord skal instansieres, før klassen bruges, og Struct behøver det ikke
8. Klasse understøtter arv og polymorfi, Struct gør ikke. Bemærk: Men Struct kan implementere interfaces ligesom klasser
9. Da Struct ikke understøtter arv, kan dets medlemmer ikke ændres med beskyttet eller beskyttet internt
10. Konstruktøren af Klasse behøver ikke at initialisere alle felter, og konstruktøren af Struct skal initialisere alle felter
11. Klasse kan definere en destruktor, men Struct kan ikke
12. Klasse er egnet til store og komplekse data, og Struct er egnet til nye typer, der ofte bruges som en kombination af nogle data.
Relevante Tilfælde: Struct har ydelsesfordele, og Class har objektorienteret udvidelsesfordele.
Typen, der bruges til det underliggende datalager, er designet som en Struct-type, og typen, der bruges til at definere applikationsadfærd, er designet som en Klasse. Hvis du er usikker på den fremtidige anvendelse af typen, bør du bruge Class. |