C#, Programming, Object-oriented Object
Pengenalan C# Erick Pranata Edisi I
Maret 2013
Karakteristik C# (C Sharp) merupakan bahasa garapan Microsoft yang merujuk pada kultur Java yang dilengkapi dengan kemampuan C++. Mengusung kepopuleran Java, C# menjadi bahasa yang patut dipertimbangkan. C# memiliki sintaks yang serupa dengan java. Perhatikan potongan program berikut: Code 1. Hello World using System; class Hello { static void Main() { Console.WriteLine("Hello World"); } } Code 1 menunjukkan sebuah source code dengan nama Hello yang memiliki method Main yang berfungsi untuk mencetak string “Hello World”. Perhatikan bahwa potongan program tersebut mirip dengan Java.
Tipe Data
Gambar 1 Tipe Data dalam C# Gambar 1 menunjukkan jenis-jenis data yang dapat ditangani. Seluruh tipe data merupakan derivasi dari Object. Dengan demikian, seluruh operasi Object juga dapat diterapkan pada tipe-tipe tersebut. Erick Pranata - Pengenalan C# - Maret 2013
1
Tipe Value vs Reference Salah satu contoh tipe data reference adalah Class, sementara Struct merupakan contoh tipe data value. Terdapat perbedaan mendasar antartipe tersebut, sebagai berikut:
variabel berisi disimpan di inisialisasi assignment contoh
Tabel 1 Perbedaan Tipe Data Value dan Reference Tipe Value Tipe Reference value Reference stack Heap 0, false, “\0” null menyalin value menyalin reference int i = 10; String s = “Hello”; int j = i; String s1 = s; i 10
s
j 10
s1
Hello
Boxing dan Unboxing Ingat kembali, setiap tipe data dalam C# dapat diperlakukan sebagai Object. Dengan demikian, bilamana suatu nilai bertipe primitif ingin diubah menjadi object, lakukan hal berikut: Code 2. Boxing Object obj = 5; Dan untuk mengembalikannya, gunakan code berikut: Code 3. Unboxing int x = (int) obj; Teknik ini berperan penting dalam polymorphism.
Erick Pranata - Pengenalan C# - Maret 2013
2
Object Oriented Programming Class maupun struct memiliki komposisi sebagai berikut: class C { ... fields, constants... // untuk OOP ... methods... ... constructors, destructors... ... properties... ... events...
// for component-based programming
... indexers... ... overloaded operators...
// for kemudahan
... nested types (classes, interfaces, structs, enums, delegates)... } Class memiliki karakteristik: 1. Dialokasikan di heap 2. Objek dibentuk dengan keyword new 3. Inherit satu Class saja 4. Inherit banyak Interface Struct memiliki karakteristik: 1. Dialokasikan di stack; Lebih cepat. 2. Dialokasikan dengan keyword new 3. Field tidak boleh diinisialisasi saat deklarasi 4. Constructor wajib memiliki parameter 5. Tidak mengenal inheritance, namun bisa inherit banyak Interface Mengenai encapsulation, C# hanya mengenal private (merupakan default) dan public. C# mengenal overloading. C# mengenal static constructor: constructor yang dijalankan satu kali, saat class tersebut pertama kali digunakan. C# mengenal destructor: aksi yang dijalankan saat suatu objek dibebaskan dari memori. Sebaiknya dihindarkan.
Erick Pranata - Pengenalan C# - Maret 2013
3
Inheritance Hanya method dengan keyword virtual yang dapat di-override, dan method yang meng-override harus menggunakan keyword override. Derived class (class turunan) dapat memiliki field maupun method dengan nama yang sama dengan Base class (class yang di-extend) tanpa harus meng-override field maupun method tersebut, dengan TIDAK menggunakan keyword virtual (akan muncul warning) atau dengan menambahkan keyword new. Dengan demikian, keyword new akan menyembunyikan field maupun method pada base class dengan nama sama. C# mendukung abstract class. C# mendukung sealed class, sehingga class berjenis ini tidak dapat diturunkan.
Operator Overloading C# menyediakan fitur untuk mengalihfungsikan beberapa operator yang biasanya ditemui pada operasi tipe data primitif seperti int, string, dll. Berikut merupakan contoh penulisannya: Code 4. Contoh Operator Overloading struct Fraction { int x, y; public Fraction (int x, int y) { this.x = x; this.y = y; } public static Fraction operator +(Fraction a, Fraction b) { return new Fraction(a.x * b.y + b.x * a.y, a.y * b.y); } } Implementasi operator overloading wajib mengembalikan nilai.
Erick Pranata - Pengenalan C# - Maret 2013
4
Conversion Operator Pengubahan nilai dari tipe data tertentu menjadi tipe data lain dapat dilakukan dengan menggunakan conversion. Secara default, C# sudah menyediakan beberapa conversion standar, seperti (int), (string), dll. Namun, C# menyediakan fitur untuk membuat conversion buatan sendiri, seperti contoh berikut: Code 5. Contoh Conversion Buatan Sendiri struct Fraction { int x, y; … public static implicit operator Fraction(int x) { return new Fraction(x,1); } public static explicit operator int(Fraction f) { return f.x/f.y; } }
Delegate Fitur lain yang cukup menarik dari C# adalah tipe data yang dapat diisi dengan method (baca: delegate). Code 6. Deklarasi Delegate class Program { Notifier n; delegate void Notifier(String sender); public Program() { n = new Notifier(Cetak1); } void Cetak1(String sender) { Console.WriteLine(sender); } } Erick Pranata - Pengenalan C# - Maret 2013
5
Potongan program pada code 6 dapat digunakan sebagai berikut: Code 7. Penggunaan Delegate class ProgramUtama { public static void Main(String[] args) { Program p = new Program(); p.n("sesuatu"); //akan menjalankan method Cetak1 } }
Referensi B. Albahari, P. Drayton, B. Merrill, C# Essentials, O'Reilly, 2001 H. Mössenböck, Introduction to C#, University of Linz, Austria S. Robinson et al, Professional C#, Wrox Press, 2001
Erick Pranata - Pengenalan C# - Maret 2013
6