CodeGym /Kurslar /C# SELF /C#-da strukturlar

C#-da strukturlar

C# SELF
Səviyyə , Dərs
Mövcuddur

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;
}
Point strukturunun elan olunması

Bu nümunədə biz müstəvidə nöqtə üçün struktur təsvir etdik, koordinatları XY 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
struct
class
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
Strukturun kopyalanması müstəqil kopya yaradır

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...
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION