Value Type vs Reference Type di C#

Menurut buku Tatang Sutarma, berbagai tipe di C# pada hakikatnya dapat dibagi menjadi beberapa kategori yakni value type, reference type, dan pointer type.

Value type meliputi hal-hal seperti enum, struct, int, float, decimal, char, bool, dll. Sedangkan reference type meliputi seluruh tipe class, interface, delegate, dynamic, object, maupun string. Adapun yang menjadi perbedaan utama dari kedua tipe tersebut adalah pada bagaimana representasi dan perlakuannya di memory.

Representasi dari setiap variabel yang bertipe value di memory adalah berupa nilainya, sedangkan tipe nilai reference di memory direpresentasikan dalam bentuk “reference” dan “object” (yang berisi nilainya).

Setiap assignment dari suatu instance ke instance lain pada value type selalu membuat kopian nilainya ke instance baru, sedangkan assignment pada reference tidak ikut mengkopi objeknya namun hanya membuat kopian referencenya saja sehingga keduanya merujuk pada object yang sama.

Untuk melihat bagaimana perbedaan diantara keduanya dapat memberikan perbedaan di dunia nyata, kita lihat pada program berikut ini:

using System;

namespace Program
{
  public struct Tatang
  {
    public int X;
    public int Y;
  }

  public class Sutarma
  {
    public int X;
    public int Y;
  }

  class Program
  {
    static void Main(string[] args)
    {
      Tatang P1 = new Tatang();
      Tatang P2 = new Tatang();
      P1.X = 1;
      P2 = P1;
      P2.X = 2;
      P2.Y = 2;
      P1.Y = 1;

      Sutarma P3 = new Sutarma();
      Sutarma P4 = new Sutarma();
      P3.X = 3;
      P4 = P3;
      P4.X = 4;
      P4.Y = 4;
      P3.Y = 3;

      Console.WriteLine("Hasil\n============");
      Console.WriteLine("Nilai P1: {0}, {1}", P1.X, P1.Y);
      Console.WriteLine("Nilai P2: {0}, {1}", P2.X, P2.Y);
      Console.WriteLine("Nilai P3: {0}, {1}", P3.X, P3.Y);
      Console.WriteLine("Nilai P4: {0}, {1}", P4.X, P4.Y);
      Console.ReadLine();
    }
  }
}

Tebak berapa saja nilai outputnya? yap betul!

Demikianlah, jadi bisa tahu kenapa begini kenapa begitu ingin ini ingin itu banyak sekali..

Lalu bagaimana dengan tipe pointer? masih menurut buku Tatang Sutarma lagi, pointer type pada memory direpresentasikan tidak berisi nilai dari variabelnya melainkan address (alamat palsu) memory dimana isi dari variabel tersebut berada. Tipe ini hanya mungkin pada konteks blok program yang unsafe (ditandai dengan keyword “unsafe”) dikarenakan langsung mengakses memory tanpa dikelola melalui CLR.

Yah gitu deh.. teuing sih can begitu ngarti saya ge yg penting nulis dulu hehe 😀 special thanks to Tatang Sutarma atas bukunya 😆

Iklan

One thought on “Value Type vs Reference Type di C#

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s