Struct dan Enum pada C#

Ada tipe data custom lain selain class: Struct dan Enum.

Struct pada C#

Struct sangat mirip dengan class, terkecuali struct adalah tipe data nilai, sedangkan class adalah tipe data referensi. Tipe data nilai menyimpan nilainya langsung di dalamnya. Sedangkan tipe data referensi tidak. Tipe data referensi hanya merujuk ke nilai yang tersimpan di tempat lain. Untuk mendeklarasikan struct pada C#, kita melakukannya seperti ketika kita mendeklarasikan class:

  struct Balok {
    public int x;
    public int y;
    public double panjang;
    public double lebar;
    public double tinggi;

    public Block(int x, int y, double panjang, double lebar, double tinggi) {
      this.x = x;
      this.y = y;
      this.panjang = panjang;
      this.lebar = lebar;
      this.tinggi = tinggi;
    }
  }

Sekarang mari kita coba perilaku tipe data nilai:

  class Program {
    static void Main(string[] args) {
      Balok b1 = new Balok(0, 0, 5, 3, 7);
      Balok b2 = b1;
      b2.x = 5;
      b2.y = 10;
      Console.WriteLine("Posisi b1: (" + b1.x + "," + b1.y + ")");
      //Posisi b1: (0,0)
      Console.WriteLine("Posisi b2: (" + b2.x + "," + b2.y + ")");
      //Posisi b2: (5,10)
      Console.ReadKey();
    }
  }

Berikutnya coba deklarasikan "Balok" sebagai class. Ubah keyword "struct" menjadi "class". Program akan menampilkan:

Posisi b1: (5,10)
Posisi b2: (5,10)

Pada contoh di atas, Anda mungkin lebih suka struct daripada class, akan tetapi coba lihat contoh berikut:

  class Program {
    static void Main(string[] args) {
      Robot R1 = new Robot("Hidup");
      Robot R2 = new Robot("Hidup");

      R1.Bunuh(R2);
      Console.WriteLine(R1.Status); //Hidup
      Console.WriteLine(R2.Status); //Mati
      Console.ReadKey();
    }
  }

  class Robot {
    public string Status;
    public void Bunuh(Robot musuh) {
      musuh.Status = "Mati";
    }

    public Robot(string status) {
      this.Status = status;
    }
  }

R2 seharusnya mati kan? Berikutnya coba ubah Robot menjadi struct. R2 akan tetap hidup (kecuali Anda memasukkan R2 sebagai referensi ke dalam method Bunuh).

Enum pada C#

Untuk mendeklarasikan enum pada C#:

  class Program {
    static void Main(string[] args) {
      Hari hariPertemuan = Hari.Rabu;
      Console.WriteLine(hariPertemuan); //Rabu

      Angka suatuAngka = (Angka) 5;
      Console.WriteLine(suatuAngka);
      Console.ReadKey();
    }
  }

  enum Hari { Minggu, Senin, Selasa, Rabu, Kamis, Jumat, Sabtu }
  enum Angka { Nol, Satu, Dua, Tiga, Empat, Lima, Enam, Tujuh, Delapan, Sembilan }
  enum Status { Membaca = 1, Menulis = 2, Standby = 8 }

Enum sebetulnya disimpan sebagai int dan ditampilkan sebagai string seperti dapat dilihat pada contoh Angka di atas. Nilai int tertentu dapat ditetapkan kepada enum tertenu pada saat deklarasi enum seperti pada contoh Status di atas.