1. Giriş
Struktur — bu, C#-da xüsusi data tipidir ki, bir neçə dəyəri (hətta fərqli tipləri) bir “qutuya” yığmağa imkan verir. Bu, sanki balaca LEGO konstruktordur: detallar yığırsan, nəticədə rahat, kompakt obyekt alırsan.
Strukturlar class-lara bənzəyir, amma onların özəllikləri var və daha “sadə” hallarda istifadə olunur, yəni class-ların bütün “gücünə” və “ağırlığına” ehtiyac olmayanda.
Sintaksis
struct Point
{
public int X;
public int Y;
}
Bu nümunədə biz müstəvidə nöqtə üçün struktur təsvir etdik, koordinatları X və Y ilə.
Strukturlar harada istifadə olunur?
Ən çox strukturlar kiçik, sadə obyektlər üçün istifadə olunur, hansılar ki, çox yüngül və “sadəcə data” olmalıdır.
C#-da bəzi standart tiplər — strukturlardır:
- int, double, bool, DateTime, TimeSpan, decimal, Guid
- və hətta, məsələn, ConsoleKeyInfo və ya Point (qrafik kitabxanalarda)
Strukturla class-ın fərqləri
| Kriteriya | Struktur | Class |
|---|---|---|
| Açar söz | |
|
| Saxlama tipi | Value Type | Reference Type |
| Harada saxlanılır | Stack-də (yaddaş sahəsi) | Heap-də (yaddaş sahəsi) |
| Metoda ötürülmə | Dəyər üzrə (kopya) | Referans üzrə |
| İrsi əlaqə | Yox (yalnız interface-lər) | Bəli |
| null ola bilər? | Yox (yalnız Nullable) | Bəli |
| Default olaraq | Bütün field-lar avtomatik sıfırla başlanır | Yalnız konstruktor vasitəsilə |
2. Strukturların elan olunması və istifadəsi
Struktur həm class daxilində, həm də xaricində elan oluna bilər:
struct Rectangle
{
public int Width;
public int Height;
}
Yaratmaq və istifadə etmək:
Rectangle r;
r.Width = 10;
r.Height = 5;
Console.WriteLine($"Sahə: {r.Width * r.Height}");
Konstruktor da istifadə etmək olar:
struct Point
{
public int X;
public int Y;
// Konstruktor
public Point(int x, int y)
{
X = x;
Y = y;
}
}
var p = new Point(3, 7);
Console.WriteLine($"Nöqtə: ({p.X}, {p.Y})");
Strukturdan nə vaxt istifadə etmək daha yaxşıdır?
- Kiçik “data topluları” üçün (məsələn, koordinat, rəng, interval, tarix və vaxt).
- Kompaktlıq və performans vacibdirsə (məsələn, massivdə milyonlarla nöqtə).
- Obyekt vahid dəyər kimi davranmalıdırsa (copy-paste — həqiqətən kopya işləyir!).
Struktur istifadə etməyə dəyməz, əgər obyekt:
- Böyük ola bilərsə (çoxlu field-lar).
- İrsi əlaqədə iştirak etməlidirsə.
- Tez-tez referans üzrə dəyişməlidirsə.
3. Strukturların xüsusiyyətləri və “tələlər”
Kopyalama
Point p1 = new Point(1, 2);
Point p2 = p1; // KOPYA yaradılır!
p2.X = 100;
Console.WriteLine(p1.X); // 1 — dəyişməyib!
Console.WriteLine(p2.X); // 100
Avtomatik default dəyərlər
Point p; // X və Y field-ları = 0, hətta açıq şəkildə təyin etməsən də!
Nullable ola bilər
null saxlamaq üçün xüsusi nullable-sintaksis istifadə etmək lazımdır — tip adından sonra sual işarəsi qoyursan. Onda dəyişənə null vermək olar.
Point? p = null;
if (p == null)
Console.WriteLine("Nöqtə yoxdur");
4. Avtomatik property və metodlu strukturlar
Strukturlar metodlar, property-lər, event-lər və hətta static üzvlər də saxlaya bilər.
public struct Range
{
public int Start { get; set; }
public int End { get; set; }
public int Length => End - Start;
public override string ToString() => $"[{Start}..{End}]";
}
Nümunə: kompleks ədədlər üçün struktur
Kompakt ədədlər üçün struktur, metodu və ToString() override-u ilə
struct Complex
{
public double Re;
public double Im;
public Complex(double re, double im)
{
Re = re;
Im = im;
}
public double Abs() => Math.Sqrt(Re * Re + Im * Im);
public override string ToString() => $"{Re} + {Im}i";
}
var z = new Complex(1, 2);
Console.WriteLine(z); // 1 + 2i
Console.WriteLine(z.Abs()); // 2.236...
GO TO FULL VERSION