C# – Classes

Ketika kamu bikin kelas, sebenernya kamu bikin blueprint buat tipe data. Jadi, belum ada data yang dibuat, tapi kamu ngasih tau arti dari nama kelas itu. Artinya, objek dari kelas itu terdiri dari apa aja dan operasi apa aja yang bisa dilakuin sama objek itu. Objek itu sendiri adalah contoh dari kelas. Method dan variabel yang ada di kelas itu disebut sebagai anggota kelas.

Defining a Class

Kalo mau bikin kelas, pake aja kata kunci class diikuti sama nama kelasnya, terus badan kelasnya diapit pake kurung kurawal. Ini bentuk umumnya:

<access specifier> class  class_name {
   // member variables
   <access specifier> <data type> variable1;
   <access specifier> <data type> variable2;
   ...
   <access specifier> <data type> variableN;
   // member methods
   <access specifier> <return type> method1(parameter_list) {
      // method body
   }
   <access specifier> <return type> method2(parameter_list) {
      // method body
   }
   ...
   <access specifier> <return type> methodN(parameter_list) {
      // method body
   }
}

Catatan:

  • Access specifiers itu menentukan aturan akses untuk anggota kelas dan kelas itu sendiri. Kalo nggak disebutin, maka access specifier default untuk tipe kelas itu internal. Access default untuk anggota-anggota kelas itu private.
  • Data type itu nentuin tipe variabel, dan return type itu nentuin tipe data yang dikembalikan oleh method, kalo ada.
  • Untuk akses anggota-anggota kelas, kamu pake operator dot (.)
  • Operator dot ini nyambungin nama objek sama nama anggota.

Contoh berikut ini nunjukin konsep-konsep yang udah kita bahas sejauh ini.

using System;

namespace BoxApplication {
   class Box {
      public double length;   // Length of a box
      public double breadth;  // Breadth of a box
      public double height;   // Height of a box
   }
   class Boxtester {
      static void Main(string[] args) {
         Box Box1 = new Box();   // Declare Box1 of type Box
         Box Box2 = new Box();   // Declare Box2 of type Box
         double volume = 0.0;    // Store the volume of a box here

         // box 1 specification
         Box1.height = 5.0;
         Box1.length = 6.0;
         Box1.breadth = 7.0;

         // box 2 specification
         Box2.height = 10.0;
         Box2.length = 12.0;
         Box2.breadth = 13.0;
           
         // volume of box 1
         volume = Box1.height * Box1.length * Box1.breadth;
         Console.WriteLine("Volume of Box1 : {0}",  volume);

         // volume of box 2
         volume = Box2.height * Box2.length * Box2.breadth;
         Console.WriteLine("Volume of Box2 : {0}", volume);
         Console.ReadKey();
      }
   }
}

Kalo kode di atas di-compile dan dijalankan, hasilnya bakal seperti ini nih:

Volume of Box1 : 210
Volume of Box2 : 1560

Member Functions and Encapsulation

Fungsi anggota kelas itu adalah fungsi yang definasinya atau prototipenya ada di dalam definisi kelas, sama kaya variabel yang lain. Fungsinya ini bisa dioperasikan di objek apa aja dari kelas itu dan bisa akses semua anggota kelas buat objek itu.

Variabel anggota itu adalah atribut-atribut dari objek (dari segi desain) dan biasanya disimpen sebagai private buat ngimplementasikan enkapsulasi. Variabel-variabel ini cuma bisa diakses pake fungsi anggota publik.

Yuk kita terapin konsep-konsep di atas buat ngatur dan dapetin nilai dari anggota-anggota kelas yang berbeda di suatu kelas.

using System;

namespace BoxApplication {
   class Box {
      private double length;   // Length of a box
      private double breadth;  // Breadth of a box
      private double height;   // Height of a box
      
      public void setLength( double len ) {
         length = len;
      }
      public void setBreadth( double bre ) {
         breadth = bre;
      }
      public void setHeight( double hei ) {
         height = hei;
      }
      public double getVolume() {
         return length * breadth * height;
      }
   }
   class Boxtester {
      static void Main(string[] args) {
         Box Box1 = new Box();   // Declare Box1 of type Box
         Box Box2 = new Box();
         double volume;
         
         // Declare Box2 of type Box
         // box 1 specification
         Box1.setLength(6.0);
         Box1.setBreadth(7.0);
         Box1.setHeight(5.0);
         
         // box 2 specification
         Box2.setLength(12.0);
         Box2.setBreadth(13.0);
         Box2.setHeight(10.0);
         
         // volume of box 1
         volume = Box1.getVolume();
         Console.WriteLine("Volume of Box1 : {0}" ,volume);
         
         // volume of box 2
         volume = Box2.getVolume();
         Console.WriteLine("Volume of Box2 : {0}", volume);
         
         Console.ReadKey();
      }
   }
}

Kalo kode di atas di-compile dan dijalankan, hasilnya bakal seperti ini nih:

Volume of Box1 : 210
Volume of Box2 : 1560

C# Constructors

Nah, constructor itu tuh fungsi spesial yang ada di dalam kelas. Fungsinya ini dijalankan tiap kali kita bikin objek baru dari kelas itu.

Constructor punya nama yang sama persis dengan nama kelasnya dan nggak punya tipe data kembalian. Contoh di bawah ini ngebahas konsep constructor lebih jelas.

using System;

namespace LineApplication {
   class Line {
      private double length;   // Length of a line
      
      public Line() {
         Console.WriteLine("Object is being created");
      }
      public void setLength( double len ) {
         length = len;
      }
      public double getLength() {
         return length;
      }

      static void Main(string[] args) {
         Line line = new Line();    
         
         // set line length
         line.setLength(6.0);
         Console.WriteLine("Length of line : {0}", line.getLength());
         Console.ReadKey();
      }
   }
}

Kalo kode di atas di-compile dan dijalankan, hasilnya bakal seperti ini nih:

Object is being created
Length of line : 6

Constructor default tuh nggak punya parameter, tapi kalo kamu butuh, constructor juga bisa punya parameter. Nah, constructor yang punya parameter tuh disebut constructor berparameter. Teknik ini bisa bantu kamu kasih nilai awal ke objek pas objek itu dibuat. Contohnya bisa dilihat di contoh berikut ini:

using System;

namespace LineApplication {
   class Line {
      private double length;   // Length of a line
      
      public Line(double len) {  //Parameterized constructor
         Console.WriteLine("Object is being created, length = {0}", len);
         length = len;
      }
      public void setLength( double len ) {
         length = len;
      }
      public double getLength() {
         return length;
      }
      static void Main(string[] args) {
         Line line = new Line(10.0);
         Console.WriteLine("Length of line : {0}", line.getLength()); 
         
         // set line length
         line.setLength(6.0);
         Console.WriteLine("Length of line : {0}", line.getLength()); 
         Console.ReadKey();
      }
   }
}

Kalo kode di atas di-compile dan dijalankan, hasilnya bakal seperti ini nih:

Object is being created, length = 10
Length of line : 10
Length of line : 6

C# Destructors

Destructor itu adalah fungsi spesial yang dijalankan tiap kali objek dari kelasnya keluar dari scope-nya, punya nama yang sama persis dengan nama kelasnya, cuma ditambahin tanda tilde (~) di depannya, dan nggak punya nilai kembalian atau parameter, bisa banget bermanfaat buat melepas sumber daya memori sebelum program berakhir, dan Destructor nggak bisa diwarisi atau di-overload.

Contohnya bisa dilihat di contoh berikut ini untuk lebih jelasnya.

using System;

namespace LineApplication {
   class Line {
      private double length;   // Length of a line
      
      public Line() {   // constructor
         Console.WriteLine("Object is being created");
      }
      ~Line() {   //destructor
         Console.WriteLine("Object is being deleted");
      }
      public void setLength( double len ) {
         length = len;
      }
      public double getLength() {
         return length;
      }
      static void Main(string[] args) {
         Line line = new Line();

         // set line length
         line.setLength(6.0);
         Console.WriteLine("Length of line : {0}", line.getLength());           
      }
   }
}

Kalo kode di atas di-compile dan dijalankan, hasilnya bakal seperti ini nih:

Object is being created
Length of line : 6
Object is being deleted

Static Members of a C# Class

Kita bisa bikin anggota kelas jadi static pake kata kunci static. Kalo kita deklarasikan anggota kelas jadi static, artinya cuma ada satu salinan dari anggota static itu meskipun kita bikin banyak objek dari kelasnya.

Kata kunci static ini ngasih tau bahwa cuma ada satu instance dari anggota itu buat satu kelas. Variabel static biasanya dipake buat ngasih nilai konstan karena nilainya bisa dipanggil tanpa bikin objek kelasnya. Variabel static bisa diinisialisasi di luar fungsi anggota atau definisi kelas. Juga bisa diinisialisasi langsung di dalam definisi kelas.

Contoh di bawah ini nunjukin penggunaan variabel static.

using System;

namespace StaticVarApplication {
   class StaticVar {
      public static int num;
      
      public void count() {
         num++;
      }
      public int getNum() {
         return num;
      }
   }
   class StaticTester {
      static void Main(string[] args) {
         StaticVar s1 = new StaticVar();
         StaticVar s2 = new StaticVar();
         
         s1.count();
         s1.count();
         s1.count();
         
         s2.count();
         s2.count();
         s2.count();
         
         Console.WriteLine("Variable num for s1: {0}", s1.getNum());
         Console.WriteLine("Variable num for s2: {0}", s2.getNum());
         Console.ReadKey();
      }
   }
}

Kalo kode di atas di-compile dan dijalankan, hasilnya bakal seperti ini nih:

Variable num for s1: 6
Variable num for s2: 6

Kamu juga bisa deklarasikan fungsi anggota jadi static. Fungsi-fungsi tersebut cuma bisa akses variabel-variabel static. Fungsi-fungsi static ini ada bahkan sebelum objek dibuat. Contoh di bawah ini nunjukin penggunaan fungsi-fungsi static.

using System;

namespace StaticVarApplication {
   class StaticVar {
      public static int num;
      
      public void count() {
         num++;
      }
      public static int getNum() {
         return num;
      }
   }
   class StaticTester {
      static void Main(string[] args) {
         StaticVar s = new StaticVar();
         
         s.count();
         s.count();
         s.count();
         
         Console.WriteLine("Variable num: {0}", StaticVar.getNum());
         Console.ReadKey();
      }
   }
}

Kalo kode di atas di-compile dan dijalankan, hasilnya bakal seperti ini nih:

Variable num: 3

Leave a Reply

Your email address will not be published. Required fields are marked *