Membuat data yang dienkapsulasi dengan struct di C#

Selesai

Dalam mengerjakan proyek untuk melacak detail pesanan, Anda memerlukan cara untuk menyimpan informasi terkait seperti nama pelanggan, alamat pengiriman, dan total pesanan bersama-sama. Structs in C# memungkinkan Anda membuat kontainer enkapsulasi dasar untuk data ini, sehingga lebih mudah untuk bekerja dengan dan meneruskan sebagai satu unit.

Memahami struktur

Struktur adalah jenis nilai dalam C#, yang berarti mereka secara langsung menyimpan data mereka daripada mereferensikannya. Anda menggunakan struct kata kunci untuk menentukan struct. Struktur biasanya digunakan untuk tipe data kecil yang berpusat pada data dan memberikan perilaku minimal.

  • Struktur memiliki semantik nilai, yang berarti nilainya disalin selama penugasan atau panggilan metode.
  • Kasus penggunaan umum termasuk mewakili angka, nilai Boolean, karakter, dan instans waktu.
  • Struktur umumnya digunakan untuk mewakili data ringan seperti bentuk geometris (misalnya, , Rectangle), koordinat Circle, atau pengaturan konfigurasi.

Struktur paling cocok untuk data kecil, tidak dapat diubah, dan kritis performa. Untuk objek yang lebih besar dan lebih kompleks atau ketika perilaku adalah fokus, pertimbangkan untuk menggunakan kelas sebagai gantinya. Tidak seperti kelas, struktur tidak dapat mewarisi dari struct atau kelas lain, tetapi dapat mengimplementasikan antarmuka.

Nasihat

Jika jenis Anda berfokus pada perilaku daripada data, kelas sering kali merupakan pilihan yang lebih baik karena semantik referensinya.

Menentukan dan mengimplementasikan struct

public struct Point
{
    public int X;
    public int Y;

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

Sampel kode menunjukkan cara menentukan struktur dengan bidang dan konstruktor di C#.

Struktur juga dapat menerapkan antarmuka tetapi tidak dapat mewarisi dari kelas atau struktur lain.

Merangkum data dengan struktur

Enkapsulasi memungkinkan Anda mengontrol akses ke data dalam struktur. Gunakan pengubah akses seperti private, public, atau internal untuk menentukan aksesibilitas.

  • Bidang dan properti dapat dibuat privat untuk membatasi akses langsung.
  • Metode dapat menyediakan cara terkontrol untuk berinteraksi dengan data.

Contohnya:

public struct Rectangle
{
    private int width;
    private int height;

    public Rectangle(int width, int height)
    {
        this.width = width;
        this.height = height;
    }

    public int Area => width * height;
}

Sampel kode menunjukkan struktur di C# dengan bidang yang dienkapsulasi dan properti komputasi untuk area.

Terapkan pengubah baca-saja ke struktur untuk imutabilitas

Kekekalan memastikan bahwa setelah struct dibuat, datanya tidak dapat diubah. Struktur berguna saat bekerja dengan data yang harus tetap konstan sepanjang masa pakainya, seperti koordinat, atau nilai konfigurasi. Saat Anda menerapkan pengubah readonly ke struktur, Anda dapat menerapkan kekekalan, membuat kode Anda lebih mudah diprediksi dan kurang rentan terhadap kesalahan yang disebabkan oleh modifikasi yang tidak diinginkan.

public readonly struct ImmutablePoint
{
    public int X { get; init; }
    public int Y { get; init; }

    public ImmutablePoint(int x, int y)
    {
        X = x;
        Y = y;
    }
}

Sampel kode menunjukkan penggunaan readonly pengubah untuk membuat struct yang tidak dapat diubah di C#.

Nota

Meskipun struktur itu sendiri tidak dapat diubah, jenis referensi yang dapat diubah di dalamnya masih dapat mengubah statusnya.

Menggunakan penginisialisasi objek dengan struktur

Saat bekerja dengan struktur, Anda sering kali perlu menginisialisasi beberapa properti. Penginisialisasi objek menyediakan cara sederhana dan dapat dibaca untuk membuat dan menginisialisasi instans struct dalam satu langkah. Pendekatan ini mengurangi kode berulang dan membuat niat Anda jelas.

Sampel kode berikut mendefinisikan struct dengan properti yang mengelompokkan data terkait bersama-sama dan memudahkan untuk menginisialisasi dan bekerja dengan instans struct.

public struct Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

Dengan menggunakan penginisialisasi objek, Anda dapat membuat dan menginisialisasi Point:

var point = new Point { X = 10, Y = 20 };

Sampel kode menunjukkan cara menggunakan penginisialisasi objek untuk mengatur nilai properti saat membuat instans struct.

Nasihat

Penginisialisasi objek membuat kode Anda lebih ringkas dan lebih mudah dibaca saat bekerja dengan struktur yang memiliki beberapa properti.

Contoh praktis: Menggunakan struktur untuk mewakili titik dalam ruang 2D

Struktur sering digunakan untuk mewakili struktur data kecil yang tidak dapat diubah. Misalnya, Anda dapat menggunakan struct untuk mewakili titik dalam ruang 2D dan menghitung jarak antara dua titik:

public struct Point
{
    public int X { get; }
    public int Y { get; }

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }

    public double DistanceTo(Point other)
    {
        int dx = X - other.X;
        int dy = Y - other.Y;
        return Math.Sqrt(dx * dx + dy * dy);
    }
}

var point1 = new Point(3, 4);
var point2 = new Point(7, 1);
Console.WriteLine($"Distance between points: {point1.DistanceTo(point2)}");

Contoh ini menunjukkan cara menentukan struct untuk suatu titik, menghitung jarak antara dua titik, dan menggunakan struct dalam program sederhana.

Menggabungkan enkapsulasi, kekekalan, dan penginisialisasi objek memungkinkan Anda membuat struktur yang efisien, dan dapat diprediksi. Fitur-fitur ini membantu Anda mengelola data terkait dengan cara yang bersih dan terorganisir.