Deklarasi kelas ibarat sebuah cetakan atau gambar desain. Kamu bisa membuat sebanyak mungkin instansi kelas berdasarkan cetakan ini.
Anggota instansi: Setiap instansi kelas merupakan objek mandiri yang memiliki sekumpulan data khusus, tidak saling mengganggu dengan instansi lain dari kelas yang sama. Disebut anggota instansi karena terikat pada objek instansi kelas.
Anggota statis: Anggota instansi adalah tipe bawaan. Kamu juga bisa mendeklarasikan anggota statis, anggota ini milik kelas itu sendiri, bukan milik instansi. Kita akan bahas lebih lanjut di materi berikutnya.
Mari lihat contohnya
class Program
{
static void Main(string[] args)
{
Factory factoryFox = new Factory();
Robot robot1 = new Robot();
Robot robot2 = new Robot();
Robot robot3 = new Robot();
}
}
class Factory
{
}
class Robot
{
public string name;
public void SayHello()
{
Console.WriteLine($"Hello everyone my name is {name},I come from Foxdevelop.com");
}
}Code language: C# (cs)
Dalam contoh ini terdapat dua kelas, yaitu Factory dan Robot. Kelas Robot memiliki satu fungsi dan satu field bernama name, sedangkan kelas Factory tidak memiliki field name.
Fungsi utama membuat satu instansi Factory dan tiga instansi Robot.
Mari amati struktur penyimpanan di memori.

Ketiga robot robot1, robot2, robot3 masing-masing memiliki variabel name sendiri yang tersimpan di lokasi memori berbeda dan tidak saling mempengaruhi. Mengubah nilai robot1 tidak akan berdampak pada robot2.
static void Main(string[] args)
{
Factory factoryFox = new Factory();
Robot robot1 = new Robot();
Robot robot2 = new Robot();
Robot robot3 = new Robot();
robot1.name = "Tom"; //Setiap nilai name bersifat mandiri, tidak saling pengaruh
robot2.name = "Jack";
robot3.name = "Smith";
}Code language: C# (cs)
Hanya satu salinan anggota fungsi
Seperti variabel name di atas, setiap instansi memiliki salinan terpisah. Mengubah nilai satu instansi tidak merubah instansi lainnya. Selain field, di dalam kelas juga terdapat anggota fungsi.
Apakah fungsi di dalam kelas hanya ada satu salinan saja dan digunakan bersama oleh semua instansi?
Badan kode fungsi (metode): hanya ada satu salinan secara global dan dipakai bersama semua instansi
Setelah dikompilasi, instruksi mesin dari metode akan disimpan di Tabel Metode (Method Table) yang menjadi milik tipe data itu sendiri. Semua instansi kelas di heap berbagi kode ini, setiap objek tidak akan mendapatkan salinan fungsi yang baru.
Contohnya fungsi SayHello yang ada di kelas Robot
class Robot
{
public string name;
public void SayHello()
{
Console.WriteLine($"Hello everyone my name is {name},I come from Foxdevelop.com");
}
}Code language: C# (cs)
Memori tidak hanya terdiri dari heap dan stack, ada area lainnya. Fungsi akan disimpan di dalam Method Table.
Fungsi kelas ditempatkan di tabel metode. Saat fungsi dipanggil, kode dari tabel ini yang dieksekusi sehingga bisa dipakai bersama semua instansi.
static void Main(string[] args)
{
Factory factoryFox = new Factory();
Robot robot1 = new Robot();
Robot robot2 = new Robot();
Robot robot3 = new Robot();
robot1.name = "Tom";
robot2.name = "Jack";
robot3.name = "Smith";
robot1.SayHello();
robot2.SayHello();
robot3.SayHello();
}Code language: C# (cs)
Pada kode di atas, ketiga pemanggilan SayHello menjalankan fungsi yang sama. Namun variabel lokal di dalam fungsi bersifat terpisah, akses ke field juga bergantung pada instansi mana yang memanggil fungsi tersebut.
public void SayHello()
{
Console.WriteLine($"Hello everyone my name is {name},I come from Foxdevelop.com");
}Code language: C# (cs)
Ketika robot1 memanggil SayHello, nilai name adalah Tom. Ketika robot2 memanggil SayHello, nilai name menjadi Jack dan seterusnya.
Anggota instansi