Cara bekerja dengan struct di C #

Meskipun ada banyak kesamaan antara class dan struct, ada beberapa perbedaan juga. Yang terpenting, struct tidak seperti kelas, adalah tipe nilai. Jadi, sementara instance kelas disimpan di heap, instance struct disimpan di stack.

Ketika sebuah instance dari struct dilewatkan ke sebuah metode, itu selalu diteruskan oleh nilai. Ini berbeda dengan apa yang terjadi ketika kita melewatkan sebuah instance dari sebuah kelas ke sebuah metode - instance tersebut diteruskan oleh referensi.

Pemrograman struct di C #

Beginilah tampilan sintaks untuk mendeklarasikan struct.

struct

{

//Data members and member functions of the struct

}

The following code snippet shows how a typical struct definition looks like.

struct Rectangle

    {

        public int width;

        public int height;

    }

Anda sekarang dapat menetapkan nilai ke anggota struct yang telah Anda tentukan sebelumnya seperti yang ditunjukkan pada cuplikan kode di bawah ini.

Rectangle rectangle = new Rectangle();

rectangle.width = 10;

rectangle.height = 15;

Potongan kode di atas membuat sebuah instance dari struct Rectangle dan memberikan nilai-nilai kepada anggota publiknya. Perhatikan bahwa Anda dapat memiliki data anggota dan metode di dalam struct. Selain itu, Anda dapat menentukan anggota sebagai pribadi, publik, dan internal. Perlu dicatat bahwa tidak seperti kelas, Anda tidak dapat memiliki penginisialisasi bidang untuk bidang non-statis di struct. Oleh karena itu, pernyataan seperti berikut ini dalam sebuah struct tidak valid.

int width = 10;

int height = 15;

Anda tetap dapat menginisialisasi anggota statis di struct Anda. Oleh karena itu, berikut ini adalah pernyataan yang valid di dalam struct.

static int area = 0;

Sekarang mari tambahkan beberapa metode ke struct. Berikut versi terbaru dari struct Rectangle yang kita buat sebelumnya. Perhatikan penggunaan konstruktor berparameter.

struct Rectangle

    {

        int width;

        int height;

        public Rectangle(int width, int height)

        {

            this.width = width;

            this.height = height;

        }

        public int GetArea()

        {

            return this.width * this.height;

        }

    }

Perhatikan bahwa meskipun struct tidak mengizinkan Anda untuk mendefinisikan konstruktor tanpa parameter eksplisit di dalamnya, Anda selalu dapat memiliki konstruktor parameter di dalam struct. Selain itu, mirip dengan kelas, Anda juga dapat memiliki konstruktor yang kelebihan beban dalam sebuah struct. Berikut adalah cara Anda dapat menyetel nilai menggunakan konstruktor dari struct Persegi dan kemudian mendapatkan luas dengan memanggil metode GetArea (). Perlu dicatat bahwa mirip dengan kelas, Anda dapat memiliki metode statis dan nonstatis di dalam struct.

static void Main(string[] args)

        {

            Rectangle rectangle = new Rectangle(10, 15);

            int area = rectangle.GetArea();

            Console.WriteLine("The area is: " + area.ToString());

            Console.Read();

        }

Seperti kelas, struct menyediakan dukungan untuk properti dan pengindeks. Satu perbedaan utama antara struct dan class adalah bahwa tidak seperti kelas, struct tidak mendukung pewarisan - Anda tidak dapat memiliki struct yang memperluas kelas lain atau struct. Namun, mirip dengan kelas, struct dapat mengimplementasikan sebuah antarmuka. Berikut adalah contoh kode yang menggambarkan hal ini.

 interface IRectangle

    {

        int GetArea();

    }

  struct Rectangle : IRectangle

    {

        int width;

        int height;

        public Rectangle(int width, int height)

        {

            this.width = width;

            this.height = height;

        }

        public int GetArea()

        {

            return this.width * this.height;

        }

    }

Memilih antara kelas dan struct

Sekarang kita sampai pada perdebatan yang menarik. Kapan kita harus menggunakan struct di atas kelas dan sebaliknya?

Seperti yang kita bahas sebelumnya di artikel ini, instance struct dibuat di tumpukan sementara instance kelas dibuat di heap terkelola. Alokasi dan deallocation jenis nilai lebih murah daripada jenis referensi. Struct adalah pilihan yang baik ketika Anda perlu membuat tipe data komposit yang akan menampung beberapa anggota data. Idealnya, ukuran anggota data struct harus kurang dari 16 byte. Anda dapat memilih struct jika Anda ingin membuat struktur data komposit kecil yang memiliki nilai semantik dan hanya berisi beberapa anggota data. Dalam menggunakan struct dalam kasus seperti itu, Anda dapat menghindari overhead yang terkait dengan pengumpulan sampah.

Anda harus mengikuti praktik terbaik yang direkomendasikan saat bekerja dengan struct. Anda harus menghindari penggunaan struct yang ukurannya lebih besar dari yang direkomendasikan dalam artikel ini. Juga, perhatikan bahwa meneruskan instance struct ke metode lebih mahal dalam hal kinerja daripada meneruskan instance kelas. Disarankan untuk menggunakan struct saat Anda bekerja dengan struktur data kecil. Anda dapat mempelajari lebih lanjut tentang topik ini dari artikel MSDN ini.