Junior
Kuo skiriasi klasės ir struktūros C#?
sobes.tech AI
Atsakymas iš AI
Klasės yra nuorodų tipai, struktūros - reikšmės tipai.
- Atminties išdėstymas: Klasės pavyzdžiai yra išdėstyti valdomame krūvoje (Heap), struktūros pavyzdžiai - stack'e (Stack) arba objekto viduje, kuriam priklauso.
- Paveldėjimas: Klasės palaiko paveldėjimą, struktūros - ne. Struktūros gali įgyvendinti sąsajas.
- Numatytoji reikšmė: Klasėms
nullyra numatytoji reikšmė. Struktūroms - nulinių laukų rinkinys. - Perdavimas į metodus: Klasės pavyzdžiai perduodami nuoroda (nuoroda į objektą). Struktūros - reikšme (kopija).
- Veikimas: Struktūros gali būti greitesnės už klases mažiems objektams, nes išvengiama krūvos valdymo ir šiukšlių surinkimo išlaidų. Tačiau, didelių struktūrų perdavimas reikšme gali būti mažiau efektyvus.
- Kūrimas: Struktūroms neapibrėžtas konstruktorius be parametrų inicijuoja laukus nuliais.
| Bruožas | Klasė (Class) | Struktūra (Struct) |
|---|---|---|
| Tipas | Nuorodinis | Reikšminis |
| Išdėstymas | Valdomas krūva | Stack / Įmontuotas |
| Paveldėjimas | Palaiko | Ne palaiko (bet įgyvendina sąsajas) |
| Numatytoji reikšmė | null |
Nulinė reikšmių rinkinys |
| Perdavimas | Per nuorodą | Per reikšmę |
| Veikimas | Gali būti lėtesnis mažiems objektams | Gali būti greitesnis mažiems objektams |
| Neapibrėžtas konstruktorius | Ne (jei yra kitų) | Taip (pradedama nuo nulio) |
// Pavyzdys klasės
public class PointClass
{
public int X { get; set; }
public int Y { get; set; }
public PointClass(int x, int y)
{
X = x;
Y = y;
}
}
// Pavyzdys struktūros
public struct PointStruct
{
public int X { get; set; }
public int Y { get; set; }
public PointStruct(int x, int y)
{
X = x;
Y = y;
}
}
// Pavyzdys perdavimo
public void ModifyPoint(PointClass pc, PointStruct ps)
{
pc.X = 100; // Pakeis pagrindinį PointClass
ps.X = 100; // Pakeis tik kopiją PointStruct
}
// Naudojimas
var pointClass1 = new PointClass(1, 2);
var pointStruct1 = new PointStruct(1, 2);
ModifyPoint(pointClass1, pointStruct1);
// pointClass1.X bus 100
// pointStruct1.X bus 1 (nes pakeista tik kopija)