Anda di halaman 1dari 65

Belajar C#

C# adalah salah satu keahlian pemrograman yang paling dicari saat ini. C# mirip dengan C++
dalam hal struktur pemrogramannya, akan tetapi juga cenderung ringkas seperti Visual Basic.
Sehingga C# menjadi bahasa pemrograman yang hebat dan mudah dipelajari.

Tujuan
Tujuan tutorial C# ini adalah membimbing Anda agar dapat membuat suatu aplikasi yang
bermanfaat. Ketika Anda selesai mempelajari tutorial ini, Anda paling tidak akan bisa
membuat suatu aplikasi windows forms yang berbasis database.

Metode belajar
Terkadang, tutorial ini akan menggunakan aplikasi Console untuk mendemontrasikan konsep
konsep di dalam tutorial ini, terkadang kita juga akan menggunakan aplikasi Windows
Forms. Hal ini dilakukan agar pengalaman belajar di situs ini singkat dan sederhana tapi juga
bersifat praktis. Karena sebagian besar dari kita "codeformoney", akan paling baik apabila
kita hanya mempelajari keahlian dan pengetahuan yang bersifat praktis, dan kita harus
melakukannya dengan cepat. Bukankah begitu?

IDE C#
Untuk mengetik program, biasanya kita menggunakan suatu editor atau program/software
yang lebih komplek yang biasa disebut IDE (Integrated Development Environment). Pada
umumnya, IDE menawarkan banyak kemudahan untuk mengembangkan software sehingga
tidak dapat dibayangkan apabila kita harus mengembangkan software tanpa menggunakan
IDE. IDE biasanya menawarkan fitur sebagai berikut:

File explorer, untuk mengelola file atau script program. Biasanya bisa dibuka di dalam tab-
tab. Bayangkan apabila kita harus membuka satu persatu file program di dalam windownya
masing-masing, taskbar window kita akan dengan cepat menjadi penuh.
Intellisense, atau kadang disebut code completion. Adalah fitur untuk melengkapi kode kita
secara otomatis. Sebagai contoh, miaslnya kita mengetikkan "Cons", VIsual Studio akan
otomatis menampilkan pilihan pilihan objek, class atau variabel yang diawali dengan Cons,
misalnya Console.
Error highlighting, atau penanda error. Ketika kita mengetikkan kode yang salah, IDE
biasanya akan menandai kode-kode yang error tersebut dengan garis bawah keriting
berwarna merah. Hal ini memudahkan kita untuk melacak dan menghilangkan error error
sederhana.

Microsoft menyediakan Visual Studio sebagai IDE untuk mengembangkan program.


Terdapat banyak versi Visual Studio yang dapat didownload pada Situs Microsoft. Dan
terdapat versi-versi Express yang bersifat gratis. Versi Visual Studio yang terbaru pada saat
tutorial ini dibuat adalah Visual Studio 2013, tetapi di sini Saya masih menggunakan Visual
Studio 2010 karena Saya masih punya software yang didevelop untuk Windows XP. Visual
Studio 2012 dan 2013 menggunakan .NET Framework 4.5 yang tidak mendukung Windows
XP. Jika Anda belum punya IDE, Saya sarankan Anda untuk mendownload Visual Studio
2010 Express All-in-one-ISO atau Visual Studio Express 2012 for Windows Desktop untuk
digunakan sepanjang tutorial ini.

Membuat aplikasi baru


Untuk membuat aplikasi baru pada Visual Studio, cukup klik "New Project..." pada halaman
awal atau klik File > New > Project... pada menubar. Akan muncul sub window seperti
berikut:

Pertama tama, pastikan kita memilih Visual C# pada panel di sebelah kiri, kemudian pilih
"Windows Forms Application" atau "Console Application" pada panel tengah. Saya sarankan
untuk mencentang "Create directory for solution" agar lebih mudah mengelola file-file
program apabila diperlukan. Terakhir, beri nama project sepertlunya dan tentukan lokasi
penyimpanan file project. Tekan OK dan kita akan siap untuk membuat kode. Tentu saja kita
dapat juga membuat aplikasi WPF atau ASP.NET menggunakan Visual Studio, akan tetapi
topik tersebut berada di luar lingkup tutorial ini.

Solution Explorer
Ketika membuat suatu project baru berarti kita telah membuat beberapa file sekaligus
menggunakan Visual Studio pada lokasi yang telah kita pilih. Pada umumnya, lebih mudah
bagi kita untuk mengelola file kita dalam Visual Studio. Untuk itu, kita menggunakan panel
Solution Explorer. Panel ini biasanya terletak di bagian kanan window Visual Studio. Apabila
panel ini tidak tampak atau tertutup, kita selalu dapat menampilkan panel tersebut
menggunakan menubar: View > Solution Explorer, atau shortcutnya CTRL + W, S.

Hello World C#
Orang yang bukan programmer mungkin tidak tahu, akan tetapi hampir setiap kali seorang
programmer belajar bahasa pemrograman baru, ia akan mencoba menampilkan tulisan "Hello
World" pada layar sebagai program pertamanya. Jadi, mari kita say hello sekarang =D

Pertama-tama, buat aplikasi Console C#. Dan beri nama "HelloWorld" sebagai nama project.
Visual Studio akan otomatis membuatkan kode program sebagai berikut:

?
1
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
using System.Text;
5
6 namespace HelloWorld
7 {
8 class Program
9 {
static void Main(string[] args)
10 {
11 }
12 }
13}
14

Terdapat beberapa komponen pada kode di atas:

static void Main, "Main" adalah suatu Method (metoda) yang akan dijalankan saat
program dijalankan. Ini adalah titik awal dari semua program C#. Sedangkan
static dan void adalah keyword yaitu kata-kata khusus pada visual studio yang
akan dijelaskan pada tutorial-tutorial berikutnya. Jangan hiraukan kata-kata tersebut
pada saat ini..
class Program. "Program" adalah nama dari class kita. Class adalah tempat dimana
kita meletakkan konsep-konsep pemikiran kita. Kita dapat memberi nama class kita
apa saja yang kita mau, biasanya suatu kata yang bermakna. Tetapi biarkan saja nama
tersebut untuk saat ini.
Namespace, adalah istilah dari Microsoft yaitu suatu nama yang menampung banyak
class. Kita mungkin tidak akan membahas mengenai namespace di sepanjang tutorial
kita. Cukup biarkan saja kode program bagian ini.
Pernyataan using, empat baris pertama pada kode di atas menyatakan bahwa
program kita akan menggunakan namespace yang disebutkan di situ. Kita tidak akan
bermain dengan bagian ini dalam waktu dekat, jadi tidak perlu dipikirkan. Hampir
selalu, kita biarkan saja bagian ini.

Untuk menyelesaikan program Hello World kita, kita tambahkan dua baris kode berikut ke
dalam kurung kurawal static void Main:

?
1static void Main(string[] args)
2{
3 Console.WriteLine("Hello World");
4 Console.ReadKey();
}
5

Baris pertama Console.WriteLine("Hello World"); menampilkan tulisan Hello World ke


Console (command prompt). Cukup dengan baris ini saja, program di atas sudah menjadi
program Hello World. Akan tetapi apabila hanya dengan baris itu, window console akan
tertutup secara otomatis setelah menampilkan tulisan "Hello World". Oleh karena itu kita
tambahkan Console.ReadKey(); setelah baris hello world untuk menjeda program sehingga
kita dapat melihat output pada console.

Penting untuk diketahui bahwa perintah-perintah pada program dieksekusi baris per baris
secara berurutan, sehingga perintah WriteLine akan dilaksanakan sebelum ReadKey. Setiap
baris program pada C# diakhiri dengan tanda titik koma.

Untuk menjalankan program, kita dapat melakukan:

Tekan tombol F5, atau


Klik tombol panah ke kanan berwarna hijau pada toolbar, atau
Klik Debug > Start Debugging pada menubar.

Visual Studio akan mengkompilasi (menerjemahkan source code program ke bahasa mesin)
program dan akan muncul window command prompt pada layar dengan tulisan "Hello
World" di dalamnya. Tekan sembarang tombol untuk keluar dari program.

Kebiasaanku
Ini hanya masalah kebiasaan, tetapi biasanya Saya meletakkan kurung kurawal pembuka pada
akhir baris pembuka. Misalnya pada namespace, class dan method Main di atas, Saya
biasanya tidak meletakkan kurawal pembuka pada baris khusus seperti di atas, melainkan
pada akhir pada baris pembukanya, sehingga kode program Saya akan tampak seperti berikut:

?
1
2 using System;
3 using System.Collections.Generic;
using System.Linq;
4 using System.Text;
5
6 namespace HelloWorld {
7 class Program {
8 static void Main(string[] args) {
9 Console.WriteLine("Hello World");
Console.ReadKey();
10 }
11 }
12}
13

Format seperti di atas tampak lebih ringkas dan lebih mudah dibaca menurut Saya. Akan
tetapi,bahkan sampai saat ini, beberapa orang masih bertumpah darah memperdebatkan
format mana yang lebih baik. Anda bebas memilih yang manapun. Akan tetapi Saya akan
konsisten dengan formatting ini. Jika Anda ingin dengan cepat mengkonversi format kode
sebelumnya menjadi format kode kebiasaan Saya, klik menu Tools > Options... pada
menubar. Pada panel sebelah kiri, pilih "Text Editor > C# > Formatting > New Lines",
kemudian matikan centang semua pilihan pada panel sebelah kanan dan tekan tombol OK.

Terakhir, tekan tombol CTRL + K, D (tahan tombol ctrl, tekan k, tekan d dan lepaskan ctrl)
untuk memformat kode kita secara otomatis.
WinForms C#
Meskipun aplikasi console mudah dan sederhana untuk digunakan sebagai pembelajaran,
akan tetapi saat ini sudah hampir tidak ada lagi aplikasi berbasis console. Oleh karena itu
tutorial ini juga akan diselingi dengan beberapa contoh aplikasi Windows Forms. Oleh karena
itu pada bagian ini kita akan sedikit berkenalan dengan aplikasi Windows Forms. Pertama-
tama, kita buat suatu project Windows Forms baru dengan nama HelloWorldWin. Akan
tampak desain tampilan Form1 pada layar. Form adalah istilah yang digunakan untuk
window yang akan muncul pada aplikasi kita.

Toolbox

Kita dapat menambahkan kontrol (controls) atau komponen (component) ke dalam form
dengan menggunakan ToolBox. Kontrol adalah objek objek visual seperti TextBox,
ComboBox, dan DateTimePicker, sedangkan komponen adalah objek objek yang tidak
tampak pada layar seperti Timer, BackgroundWorker, dan ErrorProvider. Apabila ToolBox
tidak tampak atau tertutup, dapat dibuka melalui menu View > ToolBox pada menubar.

Untuk menambahkan objek ke dalam Form, dobel klik atau drag objek yang diinginkan
ke dalam form. Sebagai contoh, mari kita coba tambahkan sebuah Label, TextBox dan
Button ke dalam Form, sehingga tampilan Form tampak seperti pada gambar di bawah.

Properties
Setelah menambahkan control ke dalam Form, desain form akan tampak seperti pada bagian
kiri gambar di atas. Untuk mengubah desain agar tampak seperti gambar di sebelah kanan,
kita gunakan panel Properties. Panel properties biasa berada di sebelah kanan window Visual
Studio. Ubah property pada masing-masing control seperti yang tertera pada tabel di bawah.

Objek Properties Nilai

Form1 Text Hello World

Label1 Text Nama :

TextBox1 Name txtNama

Name btnHalo
Button1
Text Bilang halo

Event Driven
Apabila pada aplikasi Console hanya terdapat satu alur program, pada aplikasi Windows
Forms terdapat kode-kode program yang hanya akan berjalan apabila terjadi Event
(kejadian) tertentu. Dobel klik pada tombol btnHalo pada desain form untuk membuat fungsi
btnHalo_Click pada program. btnHalo_Click adalah suatu fungsi yang akan dijalankan setiap
kali btnHalo diklik. Perlu diketahui bahwa btnHalo_Click bukanlah suatu event, melainkan
hanya suatu fungsi yang dikaitkan dengan event Click pada btnHalo. Apabila Anda baru
mulai mempelajari C#, Anda belum perlu memahami sampai sejauh ini, akan tetapi apabila
Anda sangat ingin tahu, Anda dapat melihat pada bagian event dan delegates. Di dalam
fungsi btn_Halo_Click, ketikkan kode berikut:

1private void btnHalo_Click(object sender, EventArgs e) {

2 MessageBox.Show("Halo Bpk/Ibu. " + txtNama.Text);

3}

Kemudian jalankan program dengan menekan tombol F5. Saat program telah jalan, coba
isikan suatu nama pada TextBox dan klik tombol btnHalo. Perintah MessageBox.Show akan
menampilkan suatu window kecil pada layar dengan tulisan sesuai dengan nilai parameter
pertamanya.

Variabel pada C#
Suatu variabel hanyalah suatu penampung data atau nilai di dalam program. Di dalam dunia
pemrograman, setiap variabel memiliki tipe data dan dalam kebanyakan bahasa
pemrograman, termasuk C#, tipe data suatu variabel ditentukan ketika variabel tersebut
dinyatakan atau diisi. Terdapat beberapa cara untuk menyatakan variabel:

[tipe data] [identifier];


[tipe data] [identifier] = [nilai];
[tipe data] [identifier 1], [identifier 2], [identifier N];
[tipe data] [identifier 1] = [nilai 1], [identifier 2] = [nilai 2], [identifier N] = [nilai N];

Sebagai contoh

int jumlahSemuaBarang;
string namaPelanggan = "Fandi";
double harga1, harga2, harga3;
int jumlah1 = 10, jumlah2 = 7, jumlah3 = 12;

Contoh pertama dan ketiga di atas hanya menyatakan variabel saja, tidak memberikan nilai
apapun untuk variabel variabel tersebut. Jika suatu variabel kosong dibaca oleh program,
akan terjadi runtime error. Variabel-variabel kosong seperti ini harus diberi nilai sebelum
dibaca.

Tipe-tipe data yang digunakan di atas adalah tipe data yang paling sering digunakan, int
adalah bilangan bulat, string adalah kumpulan karakter, dan double adalah bilangan real. Kita
akan belajar mengenai tipe data pada bagian selanjutnya dari tutorial ini.

Identifier pada C#
Identifier adalah suatu nama yang mewakili hal-hal di dalam program. Identifier dapat
mewakili suatu variabel, konstanta, metoda atau fungsi, properties, class, enum atau struct.
Pada C#, berlaku ketentuan-ketentuan berikut pada Identifier:

Harus unik, tidak boleh terduplikasi.


Bersifat case sensitive, Nama dan nama merupakan dua identifier yang berbeda.
Harus dimulai dengan huruf atau underscore, angka diperbolehkan setelah karakter
pertama.
Tidak mengandung spasi. Jika terdiri dari lebih satu kata, disarankan menggunakan
underscore sebagai pengganti spasi atau menggunakan CamelCase.
Tidak mengandung karakter khusus ( @, $, # ), ataupun operator (+, -, /, *, dsb)
Bukan merupakan keyword (for, if, class, using, continue, break, dsb)

Tipe data pada C#


Meskipun banyak tipe data pada C#, tipe-tipe data yang paling sering digunakan adalah int,
double, string, bool dan object. Masing-masing memiliki kegunaannya sendiri:

int, digunakan untuk menyatakan suatu bilangan bulat, positif maupun negatif,
sebagai contoh jumlah murid dalam satu kelas.
double, digunakan ketika kita perlu menyatakan suatu bilangan pecahan, misalkan
nilai, harga atau berat. Akan tetapi, double adalah data dengan ketelitian 15-16 digit.
Sehingga terkadang tipe data float dengan ketelitian 7 digit lebih disukai untuk contoh
contoh tadi, dengan alasan menghemat memori.
string, digunakan ketika menyatakan sekumpulan karakter, baik itu nama, kalimat,
password ataupun kode. String sesungguhnya merupakan suatu array dari char.
bool, bernilai true atau false. Paling sering digunakan untuk menyatakan suatu
kondisi, misalnya IsEnabled, IsVisible, SedangHujan, SedangLapar, dan lain lain.
object, adalah class dasar dari semua tipe data dalam C#. Digunakan untuk
menyatakan tipe data yang tidak pasti.

Tipe-tipe data lainnya adalah:

Mirip dengan int: sbyte, short, long, untuk tipe bertanda, byte, ushort, uint, ulong
untuk tipe yang tak bertanda
Mirip dengan double: float dan decimal
char, untuk menyimpan satu karakter

Konversi tipe data antar angka pada C#


Terkadang kita dapat langsung menugaskan nilai antar tipe data yang berbeda. Misalnya jika
kita menubaskan suatu nilai int ke variabel long, tidak ada perintah khusus yang dibutuhkan.
Jika kita menugaskan tipe data yang lebih kecil ke tipe data yang lebih besar, C# akan secara
implisit mengkonversi nilai tersebut. Akan tetapi jika tipe data yang lebih besar ditugaskan ke
tipe data yang lebih kecil, diperlukan konversi tipe data. Sebagai contoh:

?
1
2 int anInt = 10;
3 long aLong = 2000000000;
long luarBatas = 3000000000;
4 //3 milyar, melebihi batas int
5
6 anInt = (int)aLong;
7 Console.WriteLine(anInt);
8 //Akan tampil 2000000000
9
10anInt = (int)luarBatas;
Console.WriteLine(anInt);
11//Akan tampil -1294967296
12
13Console.ReadKey();
14

Penting diketahui bahwa jika suatu tipe data yang lebih besar dikonversi ke tipe data yang
lebih kecil, dapat terjadi kehilangan data. Hal-hal ini juga berlaku ketika mengkonversi antara
tipe data bilangan bulat dengan tipe data floating point. Selalu ingat bahwa
berkurangnya ketelitian dapat terjadi.

Konversi tipe data string pada C#


Tipe yang paling banyak digunakan untuk input, output dan penyimpanan sebetulnya adalah
string. Untuk mengkonversi tipe data apapun ke string sesungguhnya cukup sederhana karena
setiap tipe data di C# memiliki metode ToString(). Sebagai contoh:

?
1
bool AdaMatahari = true;
2int angka = 15;
3double pecahan = 70.88;
4
5Console.WriteLine(AdaMatahari.ToString()); //True
6Console.WriteLine(angka.ToString()); //15
Console.WriteLine(pecahan.ToString()); //70.88
7
8Console.ReadKey();
9

Di sisi lain, agak sulit mengkonversi dari string ke tipe lain. Semua tipe data numerik
memiliki metoda Parse dan TryParse. Kita menggunakan ini untuk mengkonversi string ke
tipe data numerik. Kita menggunakan Parse ketika kita SANGAT yakin mengenai string yang
bersangkutan, ketika kita tidak yakin, kita gunakan TryParse. Sebagai contoh:

?
1 string strBool = Console.ReadLine();
2 bool aBool = Boolean.Parse(strBool);
3 Console.WriteLine(aBool);
4
5 string strInt = Console.ReadLine();
6 Console.WriteLine(Int32.Parse(strInt));
7 string strDouble = Console.ReadLine();
8 double aDouble;
9 bool BisaParse = double.TryParse(strDouble, out aDouble);
10if (BisaParse) Console.WriteLine(aDouble); else Console.WriteLine("Tolong
11input suatu angka");
12
Console.ReadKey();
13

Coba masukkan "True" atau "FaLsE" pada prompt pertama, dan input yang valid pada
prompt kedua dan ketiga. Program akan mengeluarkan kembali input yang diterima.
Kemudian coba masukkan string yang bukan boolean ke dalam prompt pertama, akan terjadi
runtime error. Dan terakhir, coba input string yang bukan angka pada prompt ketiga, program
akan dengan rapi menampilkan "Tolong input suatu angka". Perlu diperhatikan bahwa
runtime error pada saat debugging berarti Critical Error pada software yang sudah jadi. Hal
ini harus dihindari semampunya.

Literal pada C#
Istilah literal atau literal constant merujuk pada suatu nilai pada program yang tidak dapat
diubah. Kita menggunakan literal untuk menyatakan nilai-nilai. Literal-literal pada C#
dijelaskan dalam tabel di berikut:
Tipe data Literal Contoh
bool true atau false true
int Bilangan bulat 0, -200, 87329
int Awalan 0x untuk menyatakan bilangan heksadesimal 0xF, 0xaeaeae
double Bilangan pecahan dengan titik untuk menyatakan koma 72.59034
double e untuk menyatakan pangkat sepuluh 6.02e23, 1.602e-19
string Karakter-karakter yang diapit oleh petik dua "6f8c11# ^_^ <3"
char Satu karakter yang diapit oleh petik satu 'K'

Untuk tipe data string, terdapat karakter karakter yang tidak dapat diketik langsung ke dalam
petik dua. Untuk mewakili karakter-karakter tersebut, digunakan escape sequences. Escape
sequence yang umum digunakan antara lain:

Escape Sequence Karakter yang diwakili


\' Single quote
\" Double quote
\\ Backslash
\0 Null, not the C# null value
\a Bell
\b Backspace
\f Form feed
\n Newline
\r Carriage Return
\t Horizontal Tab
\v Vertical Tab

Sebagai contoh apabila kita ingin menampung mysql < "path\ke\file\sqldump" ke


dalam suatu string:

string command = "mysql < \"path\\ke\\file\\sqldump\"";

Batas nilai tipe-tipe data numerik pada C#


Bagian ini tidak terlalu penting, jika Anda lebih menghargai waktu dibanding pengetahuan,
lewati bagian ini. Salah satu alasan untuk menggunakan tipe data lainnya adalah karena
batasan nilai. Batasan nilai pada tiap tipe data di C# dipaparkan pada tabel berikut:

Tipe
Penjelasan Batas nilai
data
Bilangan bulat 8 bit
sbyte 128 sampai 127
bertanda
Bilangan bulat 16 bit
short 32,768 sampai 32,767
bertanda
Tipe
Penjelasan Batas nilai
data
Bilangan bulat 32 bit
int 2,147,483,648 sampai 2,147,483,647
bertanda
Bilangan bulat 64 bit 9,223,372,036,854,775,808 sampai
long
bertanda 9,223,372,036,854,775,807
Bilangan bulat 8 bit tak
byte 0 sampai 255
bertanda
Bilangan bulat 16 bit tak
ushort 0 sampai 65,535
bertanda
Bilangan bulat 32 bit tak
uint 0 sampai 4,294,967,295
bertanda
Bilangan bulat 64 bit tak
ulong 0 sampai 18,446,744,073,709,551,615
bertanda
Floating point berketelitian
float 1.5e45 sampai 3.4e38
7 digit
Floating point berketelitian
double 5.0e324 sampai 1.7e308
15-16 digit
Bilangan dengan 28-29
decimal (-7.9 x 1028 sampai 7.9 x 1028) / (100 to 28)
angka penting

Bilangan bulat bertanda sesungguhnya menggunakan 1 bit dari ukuran data mereka untuk
menyatakan tanda (negatif atau positif). Itulah kenapa batas nilai positif dari tipe tak bertanda
dua kali lebih besar dari tipe yang bertanda dengan ukuran data yang sama. Akan tetapi
bilangan bulat bertanda sudah jarang digunakan kecuali ketika berurusan dengan antarmuka
hardware, pengolahan citra, atau pemrograman tingkat rendah lainnya. Dan juga, saya
sarankan hindari menggunakan tipe data decimal karena tipe data ini tidak lazim pada bahasa
pemrograman yang lain.

Operator aritmatika pada C#


Ada banyak operator bawaan pada C# yang dapat dikategorikan ke dalam operator
aritmatika, operator penugasan, operator pembanding, operator logika dan operator bitwise.
Akan tetapi di sini kita tidak akan membahas semua operator tersebut. Kita hanya akan
membahas seperlunya saja. Pertama-tama, saya ingin memperkenalkan operator penugasan
yang telah kita gunakan beberapa kali sebelumnya, yaitu operator "=". Kita menggunakan
operator ini untuk memberi nilai ke suatu variabel. Sebagai contoh:

int anInt = 30;

Pernyataan di atas akan mengakibatkan anInt menyimpan nilai 30. Berikutnya adalah
operator aritmatika, yaitu:

sebagai contoh, misalkan kita punya a = 15, b = 10


Operator Keterangan Contoh Hasil

+ Penjumlahan a+b 25

- Pengurangan a-b 5

* Perkalian a*b 150

/ Pembagian a/b 1

% Modulus a%b 5

++ Increment a++ 16

-- Decrement a-- 14

- Minus -a -15

Perhatikan bahwa pada contoh pembagian di atas, 15 dibagi 10 seharusnya 1,5. Hal ini benar
untuk tipe data double. Akan tetapi pada contoh di atas diasumsikan a dan b adalah integer
yang mana akan membulatkan ke bawah setiap bilangan pecahan positif. Terdapat prioritas
dalam operator-operator di atas. Operator increment, decrement dan minus akan dihitung
duluan, kemudian baru modulus, perkalian dan pembagian, terakhir barulah operator
pengurangan dan penjumlahan. Jika perlu untuk mengubah urutan eksekusi, tanda kurung
dapat digunakan. Di bawah ini adalah contoh sederhana operasi aritmatika:

1 double harga = 32;

2 double diskon = 0.2; //20% off


double hargaDiskon = harga - (harga * diskon);
3

4
Console.WriteLine("Harga dasar: " + harga);
5
Console.WriteLine("Diskon : " + diskon * 100 + "%");
6
Console.WriteLine("Harga : " + hargaDiskon);
7
//Harga dasar: 32
8
//Diskon : 20%
9 //Harga : 25.6

10

11Console.ReadKey();
12

Hasil perhitungan hargaDiskon sesungguhnya akan tetapi sama meskipun tanpa tanda
kurung. Akan tetapi seringkali, lebih mudah untuk menggunakan tanda kurung daripada
harus meninjau kembali urutan prioritas operator. Pernyataan yang bersangkutan juga akan
lebih mudah dibaca dengan menyertakan tanda kurung. Perhatikan bahwa tanda "+" di dalam
metoda Console.WriteLine bukanlah operator aritmatika, melainkan operator penyambungan
string. Ketika + digunakan di antara angka, ia menjadi operator aritmatika, akan tetapi ketika
digunakan di antara string dengan tipe data apa saja, ia menjadi operator penyambungan
string.

Terdapat juga operator yang di sebut operator majemuk. Terkadang kita ingin menambahkan
sesuatu ke nilai yang sebelumnya, sebagai contoh, kita ingin menaikkan harga menjadi 34,
kita dapat menuliskan harga = harga + 2; Tetapi dengan operator majemuk, kita cukup
menuliskan harga += 2; yang akan menghasilkan hasil yang sama. Operator-operator
majemuk antara lain:

sebagai contoh jika a = 15

Operator Keterangan Contoh Hasil

+= Penambahan dan penugasan a += 30 45

-= Pengurangan dan penugasan a -= 3 12

*= Perkalian dan penugasan a *= 5 75

/= Pembagian dan penugasan a /= 5 3

%= Modulus dan penugasan a %= 6 3

Kondisi pada C#
Pada bagian ini Saya akan menunjukkan cara menggunakan kondisi pada C#. Terdapat dua
perintah kondisi pada C#, yaitu if dan switch. If lebih sering digunakan. Sebelumnya, Saya
akan memperkenalkan operator pembanding / relasi dan operator logika yaitu jenis operator
yang paling sering digunakan dengan if:

Operator relasi pada C#


Operator Description Example
== Sama dengan pass == "password"
!= Tidak sama dengan status != "aktif"
> Lebih besar dari umur > 30
>= Lebih besar atau sama dengan umur >= 30
Operator Description Example
< Kurang dari total < 20
<= Kurang atau sama dengan total <= 30
is Uji tipe data oNilai is Double

Operator logika pada C#


Operator Description Example
&& Kondisi AND IsValid && Authorized
|| Kondisi OR pembelian < 100 || pembelian >= 500
! NOT !angka

Sifat operator logika

a b && ||
True True True True
True False False True
False True False True
False False False False

Operator && akan menghasilkan true jika kedua kondisi bernilai benar. Jika salah satu atau
kedua kondisi bernilai salah, operator && akan bernilai salah. Operator || akan menghasilkan
true jika salah satu atau kedua sisi bernilai benar. Akan bernilai salah apabila kedua kondisi
bernilai salah.

If else pada C#
Terdapat beberapa cara untuk menggunakan kondisi if else. Salah satunya adalah if else satu
baris yang telah ditunjukkan pada bagian tipe data. Secara umum, struktur if else adalah
sebagai berikut:

?
1
2if (kondisi1) {
//Perintah ketika kondisi 1 terpenuhi
3} else if (kondisi2) {
4 //Perintah ketika kondisi 2 terpenuhi
5} else if (kondisi3) {
6 //Perintah ketika kondisi 3 terpenuhi
7} else {
//Ketika semua kondisi lain tak terpenuhi, lakukan ini
8}
9

Kondisi-kondisi di atas adalah variabel atau pernyataan boolean. Dan blok else if dan else
bersifat opsional.

Contoh if sederhana pada C#


Sebagai contoh, buat suatu aplikasi windows forms dan desain Form menyerupai gambar di
bawah:

Kontrol interaktif pada desain di atas diberi nama: txtUsername, txtPassword, txtKonfirmasi,
txtUmur, btnSimpan dan btnBatal. Properties Text pada Form, Label dan Button dapat dilihat
pada desain di atas. Khusus untuk txtPassword dan txtKonfirmasi, ubah properties
PasswordChar menjadi "#", sehingga input user akan disembunyikan oleh tanda sharp/hash.
Kemudian dobel klik pada btnSimpan untuk membuat fungsi event btnSimpan_Click dan
ketikkan kode berikut:

?
1private void btnSimpan_Click(object sender, EventArgs e) {
2 //Cek field-field yang kosong
3 if (txtUsername.Text.Trim() == string.Empty) {
4 MessageBox.Show("Harap isi username");
5 }
}
6

Pada contoh di atas, kita mengecek apakah username koosong. Jika username kosong, kita
meminta user untuk menginput username. Terdapat beberapa hal baru pada kode di atas:

Double slash (garis miring ganda) menyatakan bahwa semua teks di sebelah kanan
double slash adalah komentar dan tidak akan dikompilasi.
Setiap string memiliki method .Trim() yang membuang semua spasi di awal dan akhir
string.
string.Empty adalah sinonim dari "" yang merupakan string kosong.

Coba jalankan program dan klik btnSimpan untuk melihat hasilnya.

Contoh if else pada C#


Berikutnya, coba tambahkan blok else if dan else ke dalam kode. Perhatikan bahwa Saya juga
membuat sebuah variabel bernama user untuk menyederhanakan kode:

?
1 private void btnSimpan_Click(object sender, EventArgs e) {
2 //Cek field-field yang kosong
3 string user = txtUsername.Text;
if (user.Trim() == string.Empty) {
4 MessageBox.Show("Harap isi username");
5 } else if (user.Length < 5 || user.Length > 25) {
6 MessageBox.Show("Panjang username harus di antara 5 dan 25
7 karakter");
} else if (user.ToLower() == "fandi") {
8 MessageBox.Show("Username sudah terpakai");
9 } else {
10 /* Kode untuk menyimpan data pendaftaran
11 * Akan dijelaskan pada saat belajar database
12 * Untuk saat ini kita akan membohongi user
* Dengan mengatakan "Pendaftaran berhasil"
13 */
14 MessageBox.Show("Pendaftaran berhasil");
15 }
16}
17
18

Terdapat beberapa hal baru lagi di atas:

Setiap string memiliki property .Length yang memberikan jumlah karakter di dalam
suatu string.
Setiap string memiliki property .ToLower() yang mengkonversi semua huruf di dalam
strim menjadi huruf kecil.
Semua yang di dalam /* dan */ pada C# adalah komentar multibaris dan tidak akan
dikompilasi.

Coba kompilasi dan jalankan program (tekan F5) dan ketikkan beberapa teks ke dalam
username dan klik Simpan. Cobalah nama-nama berikut:

agus, program akan menampilkan: Panjang username harus di antara 5 dan 25


karakter.
fandi, program akan menampilkan: Username sudah terpakai
kennedy, program akan menampilkan: Pendaftaran berhasil

Kesalahan umum pada if else


Salah satu kesalahan umum pemrograman adalah salah meletakkan kode. Sebagai contoh,
seorang programmer pemula dapat dengan mudah terjebak membuat kode seperti berikut:

?
1 private void btnSimpan_Click(object sender, EventArgs e) {
//Cek field-field yang kosong
2 string user = txtUsername.Text;
3 if (user.Trim() == string.Empty) {
4 MessageBox.Show("Harap isi username");
5 } else if (user.Length < 5 || user.Length > 25) {
6 MessageBox.Show("Panjang username harus di antara 5 dan 25
karakter");
7 } else if (user.ToLower() == "fandi") {
8 MessageBox.Show("Username sudah terpakai");
9 }
10 MessageBox.Show("Pendaftaran berhasil");
}
11
12

Perhatikan bahwa kode untuk menyimpan data ("Pendaftaran berhasil") berada di luar blok if,
yang berarti bahwa username apapun akan selalu disimpan, tidak peduli ada peringatan atau
tidak. Hanya pernyataan di dalam blok if yang dieksekusi dengan kondisi. Di luar blok if,
pernyataan akan selalu dieksekusi.

If else bersarang pada C#


Setelah berhasil menjalankan kode di atas, coba tambahkan validasi password ke dalam blok
kode else seperti ditunjukkan di bawah. Perhatikan bahwa telah ditambahkan variabel pass
dan konfirmasi dan juga MessageBox "Pendaftaran berhasil" telah dipindahkan ke dalam
blok else milik validasi password:

?
1
2
3 private void btnSimpan_Click(object sender, EventArgs e) {
4 //Cek field-field yang kosong
string user = txtUsername.Text;
5 string pass = txtPassword.Text;
6 string konfirmasi = txtKonfirmasi.Text;
7 if (user.Trim() == string.Empty) {
8 MessageBox.Show("Harap isi username");
9 } else if (user.Length < 5 || user.Length > 25) {
MessageBox.Show("Panjang username harus di antara 5 dan 25
10karakter");
11 } else if (user.ToLower() == "fandi") {
12 MessageBox.Show("Username sudah terpakai");
13 } else {
if (pass.Trim() == "") {
14 MessageBox.Show("Harap isi password");
15 } else if (pass.Length < 6) {
16 MessageBox.Show("Password paling tidak harus 6 karakter");
17 } else if (pass != konfirmasi) {
18 MessageBox.Show("Konfirmasi password tidak sesuai");
} else {
19 /* Kode untuk menyimpan data pendaftaran
20 * Akan dijelaskan pada saat belajar database
21 * Untuk saat ini kita akan membohongi user
22 * Dengan mengatakan "Pendaftaran berhasil"
*/
23
MessageBox.Show("Pendaftaran berhasil");
24 }
25 }
26}
27
28

Coba jalankan kode dan klik tombol simpan dengan berbagai kondisi. Password if di dalam
blok else ditujukan untuk demonstrasi if bersarang. Meskipun hal ini dapat dilakukan, akan
lebih baik untuk menghindari if bersarang karena if bersarang dapat dengan mudah
membingungkan kita.

Alternatif if bersarang
Now select all the codes inside the btnSave_Click function and press CTRL + K, C to
comment all those codes and type in some new codes (to uncomment, select and press CTRL
+ K. U):

?
1 private void btnSimpan_Click(object sender, EventArgs e) {
2 ////Cek field-field yang kosong
//string user = txtUsername.Text;
3 //string pass = txtPassword.Text;
4 //string konfirmasi = txtKonfirmasi.Text;
5 //if (user.Trim() == string.Empty) {
6 // MessageBox.Show("Harap isi username");
//} else if (user.Length < 5 || user.Length > 25) {
7 // MessageBox.Show("Panjang username harus di antara 5 dan 25
8 karakter");
9 //} else if (user.ToLower() == "fandi") {
10 // MessageBox.Show("Username sudah terpakai");
11 //} else {
// if (pass.Trim() == "") {
12 // MessageBox.Show("Harap isi password");
13 // } else if (pass.Length < 6) {
14 // MessageBox.Show("Password paling tidak harus 6 karakter");
15 // } else if (pass != konfirmasi) {
16 // MessageBox.Show("Konfirmasi password tidak sesuai");
// } else {
17 // /* Kode untuk menyimpan data pendaftaran
18 // * Akan dijelaskan pada saat belajar database
19 // * Untuk saat ini kita akan membohongi user
20 // * Dengan mengatakan "Pendaftaran berhasil"
// */
21 // MessageBox.Show("Pendaftaran berhasil");
22 // }
23 //}
24
25 //Cek field-field yang kosong
26 string user = txtUsername.Text;
string pass = txtPassword.Text;
27 string konfirmasi = txtKonfirmasi.Text;
28
29 //Validasi username
30 if (user.Trim() == "") { MessageBox.Show("Harap isi username"); return;
31}
if (user.Length < 5 || user.Length > 25) { MessageBox.Show("Panjang
32username harus di antara 5 dan 25 karakter"); return; }
33 if (user.ToLower() == "fandi") { MessageBox.Show("Username sudah
34terpakai"); return; }
35
36 //Validasi password
37 if (pass.Trim() == "") { MessageBox.Show("Harap isi password"); return;
}
38 if (pass.Length < 6) { MessageBox.Show("Password paling tidak harus 6
39karakter"); return; }
40 if (pass != konfirmasi) { MessageBox.Show("Konfirmasi password tidak
41sesuai"); return; }
42
43 //Validasi umur
int umur;
44 bool umurBenar = Int32.TryParse(txtUmur.Text, out umur);
45 if (!umurBenar) { MessageBox.Show("Harap input umur yang benar");
46return; }
47
48 //Registrasi
49 string tipeRegistrasi;
if (umur < 18) tipeRegistrasi = "Anak anak"; else tipeRegistrasi =
50"Dewasa";
51 MessageBox.Show("Pendaftaran " + tipeRegistrasi + " berhasil");
52}
53

Saya memperkenalkan perintah return pada kode di atas. Perintah return akan mengakhiri
eksekusi suatu fungsi, sehingga semua baris setelah perintah return tidak akan dijalankan.
Menurut pendapat saya, kode di atas jauh lebih rapi dibandingkan kode if bersarang

Perhatikan juga bahwa pada bagian registrasi, terdapat perintah if satu baris. Pada perintah if
else sederhana, lebih baik menggunakan bentuk ini agar dapat lebih mudah membaca dan
memahami kode kita sendiri. Jika kita menggunakan if berbentuk blok-blok seperti
sebelumnya, kodenya akan tampak seperti:

?
1if (umur < 18) {
2 tipeRegistrasi = "Anak anak";
3} else {
4 tipeRegistrasi = "Dewasa";
5}

If berbentuk blok memakan 5 baris kode, sedangkan if satu baris hanya menggunakan satu
baris.

Operator ternary pada C#


Ada yang lebih baik lagi. Pada penugasan sederhana yang berkondisi, kita dapat
menggunakan operator ternary untuk membuat kode kita lebih pendek lagi:

?
1tipeRegistrasi = (umur < 18) ? "Anak anak" : "Dewasa";

Format ternary operator adalah: (kondisi) ? [nilai jika benar] : [nilai jika
salah];

Perintah switch pada C#


Perintah switch adalah salah satu struktur kode yang pernah saya gunakan. Hampir selalu,
struktur if dapat menggantikan struktur switch. Bentuk perintah switch pada C# adalah:
?
1
2 switch (variabelUji) {
3 case [literal 1]:
4 //Blok kode 1
break;
5 case [literal 2]:
6 //Blok kode 2
7 break;
8 case [literal 3]:
9 //Blok kode 3
break;
10 default:
11 //Jika yang lain tidak terpenuhi
12 break;
13 }
14

Sebagai contoh, buatlah suatu aplikasi console bernama cobaSwitch dan ketikkan kode
berikut:

?
1
2
3 class Program {
4 static void Main(string[] args) {
Console.WriteLine("1. Utara");
5
Console.WriteLine("2. Timur");
6 Console.WriteLine("3. Barat");
7 Console.WriteLine("4. Selatan");
8 Console.WriteLine("Ke mana anda akan pergi?");
9 string strInput = Console.ReadLine();
10
int arah;
11 bool berupaAngka = Int32.TryParse(strInput, out arah);
12 if (!berupaAngka) {
13 Console.WriteLine("Input tidak benar");
14 } else {
15 switch (arah) {
case 1: Console.WriteLine("Tampak sebuah danau"); break;
16 case 2: Console.WriteLine("Tampak sebuah hutan"); break;
17 case 3: Console.WriteLine("Tampak sebuah padang rumput"); break;
18 case 4: Console.WriteLine("Tampak sebuah gurun"); break;
19 default: Console.WriteLine("Arah tidak benar"); break;
}
20 }
21 Console.ReadKey();
22 }
23}
24
25

Perulangan while pada C#


Syntax perulangan while pada C# adalah:

1while (kondisi) {

2 [perintah]

3}

Ketika suatu program sampai pada suatu perulangan while, pernyataan di dalam perulangan
tersebut akan dijalankan terus menerus selama cond bernilai benar. Ketika menggunakan
perulangan while, pada umumnya perlu memperhatikan tiga hal: permulaan, kondisi dan
iterasi. Sehingga strukturnya menjadi:

1[permulaan]

2while (kondisi) {

3 [perintah]

4 [iterasi]

5}

Sebagai contoh:

1
Console.WriteLine("Balapan akan dimulai dalam...");
2 int hitung = 10;

3 while (hitung > 0) {

4 Console.WriteLine(hitung + "...");

5 hitung--;

6}
Console.WriteLine("MULAI!!!");
7
Console.ReadKey();
8

Kode di atas akan menghasilkan:


Balapan akan dimulai dalam...
10...
9...
8...
7...
6...
5...
4...
3...
2...
1...
MULAI!!!

Cukup sering kesalahan terjadi pada permulaan, kondisi atau iterasi. Sebagai contoh, cukup
mudah untuk lupa menuliskan hitung--; yang akan mengakibatkan perulangan tanpa
batas, atau menggunakan kondisi hitung < 0 yang akan mengakibatkan perulangan sama
sekali tidak dijalankan. Apabila terjadi perulangan tanpa batas, anda dapat langsung menutup
window console, atau klik tombol "stop debugging" pada toolbar atau menekan
shortcut: SHIFT + F5.

Perulangan do while pada C#


Perulangan do while hanya berbeda sedikit dari perulangan while. Perulangan do while akan
dijalankan paling tidak satu kali karena kondisi perulangan ini terletak pada akhir perulangan.
Syntax perulangan do while adalah sebagai berikut:

1do {

2 [perintah]

3} while (kondisi);

Satu satunya perbedaan antara perulangan do while dan perulangan while adalah ketika
kondisi awal bernilai salah, yang mana akan mengakibatkan perulangan while dilewatkan
sedangkan perulangan do while dijalankan hanya satu kali.

Perulangan for pada C#


Syntax perulangan for jauh lebih sederhana dibandingkan dengan perulangan while. Syntax
perulangan for adalah:

1for ( [pendahuluan] ; [kondisi]; [iterasi] ) {


2 [perintah]

3}

Blok kode { } bisa juga digantikan dengan satu perintah tunggal sehingga menjadi syntax
perulangan for satu baris:

1for ( [pendahuluan] ; [kondisi]; [iterasi] ) [perintah tunggal]

Bagian pendahuluan akan dijalankan pertama kali ketika perintah for dijumpai. Setelah
pendahuluan dan setiap kali perulangan kembali ke awal, kondisi akan diuji. Perintah di
dalam blok perulangan for akan dijalankan jika kondisi bernilai benar, dan perulangan akan
berakhir ketika kondisi bernilai salah. Iterasi adalah kode yang akan dijalankan setiap kali
perulangan berhasil berputar satu kali.

Berikut adalah contoh perulangan for pada C#:

1for (int i = 1; i <= 20; i *= 2) {

2 Console.WriteLine(i);

3}

4Console.ReadKey();

Yang akan menghasilkan:

1
2
4
8
16

Perulangan for di atas juga dapat dibuat menjadi perulangan for satu baris menjadi:

1for (int i = 1; i <= 20; i *= 2) Console.WriteLine(i);

2Console.ReadKey();

Array pada C#
Array merupakan variabel yang dapat menampung banyak nilai sekaligus. Array
dideklarasikan dengan tipe data diikuti dengan sepasang kurung siku. Sebagai contoh:

1int[] aAngka;

2string[] aNama;

3object[] aObjek;

Deklarasi array di atas hanya menghasilkan variabel array kosong. Untuk memberi nilai awal
pada array, lakukan salah satu dari cara berikut:

1int[] aAngka = new int[5];

2string[] aNama = new string[] { "Joni", "Meri", "David" };

3object[] aObjek = { 20.33, "Lorem ipsum", DateTime.Now, true, 'D' };

Contoh pertama membuat 5 int kosong, sedangkan contoh kedua membuat array dengan
ukuran 3 dan langsung menugaskan nilai-nilai kepada elemen-elemen array tersebut. Contoh
ke tiga menunjukkan versi lain dari contoh ke dua yang mengabaikan keyword "new".
Contoh ke tiga juga menunjukkan bahwa kita dapat menugaskan nilai bertipe apa saja kepada
suatu objek. Pada contoh ke tiga, kita menugaskan double, string, DateTime, bool dan char
sekaligus ke dalam array object tersebut.

Mengakses elemen pada array


Ketika kita mendeklarasikan int[] aAngka = new int[5]; kita membuat 5 int sekaligus
yang dapat diakses dengan variabel aAngka[0], aAngka[1], aAngka[2], aAngka[3] and
aAngka[4]. Kita menyebut int-int ini sebagai elemen dari array, dan angka di dalam kurung
siku sebagai index. Penting untuk diketahui bahwa index selalu dimulai dari 0 seperti dapat
dilihat pada contoh. Berikut adalah sebuah contoh program yang menggunakan array:

double[] aBerat = new double[5];


1

2
for (int i = 0; i < aBerat.Length; i++) {
3
string strBerat = Console.ReadLine();
4
aBerat[i] = double.Parse(strBerat);
5
}
6

7 Console.WriteLine("----------------");

8 double total = 0;
for (int i = 0; i < aBerat.Length; i++) {
9
total += aBerat[i];
10
}
11
Console.WriteLine("Rata-rata dari berat: " + (total / aBerat.Length));
12
Console.ReadKey();
13

14

Array multidimensi pada C#


Semua contoh di atas adalah contoh array satu dimensi. Untuk menggunakan array
multidimensi, kita gunakan:

1int[,] aTahun = new int[,] { { 2001, 2002, 2003 }, { 2005, 2006, 2007 } };

2Console.WriteLine(aTahun[0, 2]); //Akan menampilkan 2003

3Console.ReadKey();

Array bergerigi pada C#


Array bergerigi mirip dengan array multidimensi. Untuk menggunakan array bergerigi, kita
lakukan:

1int[][] aTahun = new int[][] { new int[] { 2003 }, new int[] { 2005, 2008,
2010 } };
2
Console.WriteLine(aTahun[1][2]); //Akan menampilkan 2010
3Console.ReadKey();

Class dan objek pada C#


Bagian ini adalah permulaan dari Object Oriented Programming (OOP). Ada banyak konsep
mengenai OOP seperti Abstraction, Encapsulation, Inheritance dan Polymorphism. Di bawah
ini adalah penjelasan mengenai Abstraction dan Encapsulation. Meskipun memahami konsep
ini dapat berguna, apabila Anda sedang buru-buru, lewati saja penjelasan tersebut sampai ke
bagian class pada C#.

Abstraction
Abstraction atau dalam bahasa Indonesia Abstraksi, bukanlah mengenai kode program.
Abstraksi hanyalah suatu proses dimana seorang programmer melihat contoh-contoh di
kehidupan nyata dan menterjemahkan konsep-konsep yang didapat ke dalam suatu program.
Sebagai contoh, seorang programmer game mula-mula akan melihat suatu mobil memiliki
kecepatan, jumlah bensin dan jenis bannya. Sedangkan programmer retailer otomotif
mungkin akan lebih peduli dengan harga, warna dan mereknya. Tentu saja mereka dapat
memasukkan semua hal tersebut dan hal lainnya ke dalam program. Akan tetapi hal ini sangat
bergantung dengan apa yang dilihat oleh programmer.

Encapsulation
Pernahkah Anda melihat kapsul? Benda mengkilat yang kita makan ketika kita sakit.
Sesungguhnya, bagian mengkilatnya hanya bagian luarnya. Di dalamnya terdapat banyak
jenis obat dan vitamin yang membuat kita lebih sehat. Ada dua hal yang terkait dengan fakta
ini:

Kita tidak tahu apa yang ada di dalam kapsul. Kita hanya tahu manfaat dan cara kerja
kapsul tersebut (ditelan).
Memakan satu kapsul berarti memakan semua obat dan vitamin di dalamnya
sekaligus.

Dengan cara yang sama, suatu class mengkapsulkan semua hal di dalamnya:
Pengguna class tidak perlu tahu bagian dalam dari class, mereka cukup tahu kegunaan
class tersebut.
Membuat suatu objek class tertentu berarti objek tersebut memiliki semua properties,
method, enum dan event di dalam class tersebut.

Class pada C#
Kita mendefinisikan class di dalam namespace pada C#. Untuk mendefinisikan suatu class
sederhana, kita tuliskan dalam namespace:

?
1[access modifier] class [nama class] {
2 //Member-member pada class
3 }

Access modifiers pada C# akan dijelaskan terakhir pada bagian ini. Untuk sekarang, cukup
gunakan public untuk semua class. Sebagai contoh, kita dapat membuat class Mobil sebagai
berikut:

?
1
2
3 namespace Belajar1 {
4 class Program {
static void Main(string[] args) {
5
6 }
7 }
8
9 public class Mobil {
10 public double kecepatan;
11 public double bensin;
public double posisi;
12 public string nama;
13
14 public void percepat() {
15 this.kecepatan += 10;
16 this.bensin -= 5;
}
17 public void maju() {
18 this.posisi += this.kecepatan;
19 this.bensin -= 2;
20 }
21 public void isiBensin(double bensin) {
this.bensin += bensin;
22 }
23 }
24}
25
26

Perhatikan bahwa class Mobil berada di dalam namespace Belajar1 setingkat dengan class
Program (dalam hal level kurung kurawalnya). Di sini kita telah melakukan proses abstraksi.
Pada class Mobil di atas, kecepatan, bensin, posisi dan nama adalah fields, sedangkan
percepat, maju dan isiBensin adalah method. Field, Property dan Mehtod akan dijelaskan lain
kali.

Objek pada C#
Suatu class digunakan untuk membuat objek. Untuk membuat objek, kita meng-instantiate
suatu class dengan salah satu dari cara berikut:

[nama class] [nama objek] = new [nama class]();


[nama class] [nama objek] = new [nama class]() { field1=nilai1,
field2=nilai2, ... };
[nama class] [nama objek] = new [nama class](param1, param2, ...);

Ketika kita membuat suatu objek dari suatu class, kita mendapatkan semua member dari class
tersebut. Kita dapat mengkases member class tersebut dengan mengetikkan titik dan nama
member yang bersangkutan. Sebagai contoh, kita tuliskan dalam class Program:

?
1
class Program {
2 static void Main(string[] args) {
3 Car SuatuMobil = new Mobil();
4 Car MobilSaya = new Mobil() { nama = "Ferrari", kecepatan = 0,
5 bensin = 30000, posisi = 0 };
MobilSaya.Percepat();
6 Console.WriteLine(SuatuMobil.nama);
7 Console.WriteLine(SuatuMobil.bensin);
8
9 Console.WriteLine(MobilSaya.nama);
10 Console.WriteLine(MobilSaya.bensin);
11 Console.ReadKey();
}
12 }
13

Program di atas akan menampilkan:

[baris kosong]
0
Ferrari
30000

Baris pertama kosong dan baris kedua bernilai 0 karena nilai default string dan int. Perlu
diingat bahwa tidak baik untuk menggunakan variabel (field nama dan bensin) tanpa
menginisialisasinya, akan tetapi program di atas hanyalah contoh. Inilah yang saya suka dari
objek. Kita cukup menuliskan new Mobil() satu kali, dan di dalam objek tersebut kita sudah
mendapatkan semua yang kita definisikan di dalam class Mobil.

Constructor pada C#
Hampir selalu, kita perlu memberi nilai pada field atau property suatu objek sebelum kita
dapat menggunakannya. Untuk itu, kita gunakan method constructor. Suatu constructor
didefinisikan dengan cara:

public [nama class] (param1, param2, ...) {


//Hal-hal yang dilakukan ketika suatu objek diinstantiate (dibuat)
}

Sebagai contoh, tambahkan kode berikut ke dalam class Mobil:

?
1public Mobil(string nama, double kecepatan, double bensin) {
2 this.nama = nama;
3 this.kecepatan = kecepatan;
4 this.bensin = bensin;
5 this.posisi = 0;
}
6

Constructor di atas menerima tiga parameter. Parameter yang diberikan digunakan untuk
menginisialisasi field-field di dalam objek. Perhatikan bahwa variabel this.nama dengan
variabel nama di atas adalah dua variabel yang berbeda. Keyword "this" pada C# mewakili
objek yang sedang aktif pada class. Ketika tidak ada parameter "nama", variabel "nama" akan
mewakili field "nama" pada class. Akan sama saja apabila kita menulis "this.name" atau
"name". Akan tetapi apabila parameter ada "nama", "nama" akan mewakili parameter
tersebut, dan untuk mewakili field nama, kita hanya dapat menggunakan "this.nama". Untuk
menggunakan constructor untuk membuat objek, kita menggunakan kode seperti berikut:

?
1Mobil MobilAnda = new Mobil("Lamborghini", 300, 50000);

Perhatikan bahwa karena constructor baru kita, perintah-perintah new Mobil() sebelumnya
menjadi error karena kita telah mendeklarasikan constructor kita. Kita dapat membuat
constructor lain di dalam class Mobil untuk menghindari error tersebut:

?
1public Mobil() {
2 this.nama = "";
3 this.kecepatan = 0;
4 this.bensin = 0;
5 this.posisi = 0;
}
6

Menurut pendapat saya, membuat constructor kosong seperti ini berbahaya karena membuat
kita dapat lupa mengisi field di dalam objek kita.

Destructor pada C#
Meskipun constructor sangatlah penting, Saya tidak pernah benar-benar menggunakan
kebalikannya: Destructor di dalam suatu program. Tujuan utama dari destructor biasanya
untuk membebaskan memoi. Akan tetapi dikarenakan C# sudah memiliki "garbage collector"
untuk membebaskan memori yang tidak digunakan lagi, destructor sangat jarang digunakan.
Untuk membuat suatu destructor, cukup membuat suatu method dengan nama yang sama
dengan nama class diawali dengan tanda tilde (~). Sebagai contoh:

?
1~Mobil() {
2 Console.WriteLine("Mobil " + nama + " telah dihancurkan");
3}

Access modifier pada C#


Access modifier menentukan apakah suatu class, method, field, property, event atau hal-hal
lainnya dapat diakses di luar class induknya.

public membuat member yang bersangkutan dapat diakses dari mana saja.
private membuat member yang bersangkutan hanya dapat diakses dari dalam class itu
sendiri.
protected membuat member yang bersangkutan hanya dapat diakses dari class itu
sendiri atau class lain yang merupakan turunan (inherits) dari class yang
bersangkutan.
internal membuat member yang bersangkutan hanya dapat diakses dari assembly yang
sama, atau dengan kata lain, aplikasi yang sama.
protected internal menggabungkan protected dan internal, yang berarti member yang
bersangkutan hanya dapat diakses dari class itu sendiri atau dari class lain dari dalam
assembly yang sama yang merupakan turunan dari class yang bersangkutan.

Perlu diketahui bahwa class puncak yang langsung berada di bawah suatu namespace hanya
dapat dideklarasi public atau internal. Mereka tidak dapat dideklarasi private, protected atau
protected internal. Hanya class di dalam class lain yang dapat dideklarasi seperti itu. Perlu
diketahui juga bahwa kata kunci static dan virtual bukanlah suatu access modifier.

Method pada C#
Method adalah sekumpulan pernyataan yang akan dijalankan ketika dipanggil. Untuk
mendefiniskan suatu method pada C#:

[Access modifier] [tipe data] [nama method] (parameter1, parameter2, ...) {


//Kumpulan perintah
}

Dari struktur di atas:

Access modifier, untuk saat ini, gunakan saja access modifier public.
Tipe data, bisa berupa void atau tipe data C# lainnya, termasuk enum atau class
custom. Merupakan tipe data yang dihasilkan method.
Nama method, berupa suatu identifier yang valid.
Parameter, sekumpulan variabel pada method untuk berkomunikasi dengan program
di luar method. Method juga bisa tidak memiliki parameter.
Kumpulan perintah, perintah perintah yang akan dijalankan ketika method
dipanggili.

Suatu method harus ditempatkan di dalam suatu class, Method adalah salah satu bentuk dari
member suatu class. Suatu method dipanggiil / dijalankan dengan menuliskan namanya.

Method void
Suatu method void adalah suatu method yang hanya menjalankan sekumpulan perintah dan
tidak menghasilkan suatu nilai (Tetapi masih dapat menampilkan sesuatu ke layar). Sebagai
contoh:

?
1
2 namespace Belajar2 {
3 class Program {
4 static void Main(string[] args) {
ContohMethod met = new ContohMethod();
5 met.Pemisah(); //Akan menampilkan pemisah
6 }
7 }
8
9 public class ContohMethod {
10 public void Pemisah() {
Console.WriteLine("----------------------");
11 Console.WriteLine("----------------------");
12 }
13 }
14}
15

Perintah return pada C#


Pada method void, suatu perintah return akan mengakhiri suatu method seperti yang telah
dijelaskan sebelumnya di bagian kondisi pada C#. Bagi method dengan tipe data selain void,
perintah return harus menyertakan suatu nilai dengan tipe data yang sama dengan tipe data
method yang bersangkutan. Pada class ContohMethod, tambahkan method berikut:

?
1
2 public void TampilBilanganRandom() {
Random r = new Random();
3 int angka = r.Next(1, 50);
4 if (angka > 25) {
5 Console.WriteLine("Terlalu panjang");
6 return;
7 }
for (int i = 1; i <= angka; i++) Console.Write(i + " ");
8 Console.WriteLine();
9 }
10

Jangan lupa panggil method tersebut pada method Main pada class Program.
?
1static void Main(string[] args) {
2 ContohMethod met = new ContohMethod();
3
4 met.TampilBilanganRandom();
5 met.Pemisah();
6
7 Console.ReadKey();
}
8

Method tersebut akan menampilkan sederet angka jika angka random lebih kecil dari 25.
Selain itu, ia hanya akan menampilkan "Terlalu panjang". Tanpa perintah return, kode di atas
masih akan terus menampilkan angka angka setelah menampilkan "Terlalu panjang". Tetapi
dengan perintah return, aliran program akan keluar dari method dan sisa kode pada method
tersebut akan diabaikan.

Jika tipe data method bukan void, perintah return harus menyertakan suatu nilai yang akan
menjadi nilai method tersebut. Sebagai contoh, tambahkan method berikut ke dalam class
ContohMethod:

?
1
public int GaussianRandom() {
2 Random r = new Random();
3 int angka1 = r.Next(0, 10);
4 int angka2 = r.Next(0, 10);
5 int angka3 = r.Next(0, 10);
return angka1 + angka2 + angka3;
6}
7

Untuk mencoba method tersebut, tambahkan pemanggilan method GaussianRandom pada


method Main, sehingga kodenya menjadi:

?
1
static void Main(string[] args) {
2 ContohMethod met = new ContohMethod();
3
4 met.TampilBilanganRandom();
5 met.Pemisah();
6 Console.WriteLine(met.GaussianRandom());
7 met.Pemisah();
8
Console.ReadKey();
9 }
10

Topik mengenai random Gaussian berada di luar pembahasan kita. Anggap saja sebagai
bentuk lain dari random. Suatu method dengan nilai return sebaiknya digunakan seperti suatu
variabel seperti ditunjukkan pada kode di atas.

Parameter method pada C#


Suatu method dapat mejadi lebih interaktif dengan parameter. Sebagai contoh:

?
1public int Max(int a, int b) {
2 if (a > b) return a; else return b;
3}

Contoh perintah yang menggunakan method di atas sebagai berikut:

?
1Console.WriteLine("Antara 2 dan 10, " + met.Max(2, 10) + " lebih besar");

Parameter optional pada C#


Parameter optional / pilihan, berarti nilai untuk parameter yang bersangkutan dapat disertakan
atau tidak disertakan. Kita dapat mengubah method Max di atas agar dapat membandingkan
dua atau tiga nilai sekaligus:

?
1public int Max(int a, int b, int c = Int32.MinValue) {
2 int max1 = (a > b) ? a : b;
3 return (c > max1) ? c : max1;
4}

Sekarang, kita masih dapat menggunakan method tersebut dengan hanya dua parameter,
tetapikita juga dapat menggunakan method tersebut dengan tiga parameter:

?
1Console.WriteLine("Antara 2 dan 10, " + met.Max(2, 10) + " lebih besar");
Console.WriteLine("5, 8, dan 7, yang terbesar adalah: " + met.Max(5, 8,
27));

Untuk mendeklarasikan parameter opsional, kita cukup memberi nilai default kepada
parameter yang bersangkutan. Pada contoh di atas, variabel c diberi nilai terkecil pada int,
sehingga tidak akan mempengaruhi hasil perbandingan ketika hanya dua parameter yang
diberikan. Perlu diketahui bahwa parameter-parameter opsional harus diletakkan sebagai
parameter-parameter terakhir.

Method overloading pada C#


Jika Anda mencoba memasukkan double sebagai parameter untuk method Max di atas, akan
timbul error. Kita dapat membuat method lain dengan nama yang sama yang menerima
parameter yang berbeda. Sebagai contoh:

?
1public double Max(double a, double b, double c = double.MinValue) {
2 double max1 = (a > b) ? a : b;
3 return (c > max1) ? c : max1;
4}
Dengan begitu, method Max kita sudah mendukung tipe data double.

Parameter referensi pada C#


Suatu parameter sederhana yang dimasukkan ke dalam suatu method nilainya akan tetap
meskipun diubah di dalam method. Sebagai contoh:

?
1public void tukar(int a, int b) {
2 int sementara = a;
3 a = b;
4 b = sementara;
5}

Jika kita gunakan method di atas:

?
1int a = 1000;
2int b = 50;
3met.tukar(a, b);
4Console.WriteLine(a); //masih 1000

Program masih akan menampilkan 1000. Akan tetapi apabila kita menyatakan parameternya
sebagai referensi:

?
1public void tukar(ref int a, ref int b) {
2 int sementara = a;
3 a = b;
4 b = sementara;
5}

Dan menggunakan methodnya juga dengan kata kunci ref:

?
1int a = 1000;
2int b = 50;
3met.tukar(ref a, ref b);
4Console.WriteLine(a); //Menampilkan 50

Program akan menampilkan 50 yang semulanya merupakan nilai variabel b. Perlu diketahui
juga bahwa variable yang dideklarasikan di dalam suatu method akan hilang begitu alur
program keluar dari method.

Parameter out pada C#


Parameter Out menyediakan cara lain untuk menugaskan nilai ke suatu variabel
menggunakan method. Sebagai contoh:
?
1public bool Kelipatan3(int a, out int terdekat) {
2 int mod = a % 3;
3 terdekat = (mod == 2) ? a + 1 : a - mod;
4 if (mod == 0) return true; else return false;
5}

Method di atas sesungguhnya menghasilkan dua output. Pertama adalah menentukan apakah
angka yang bersangkutan merupakan kelipatan 3 atau bukan. Kedua, method tersebut juga
menghasilkan faktor kelipatan 3 yang paling dekat dengan angka tersebut. Untuk
menggunakan method tersebut:

?
1int angka = 7;
2int terdekat;
bool BerupaFaktor = met.Kelipatan3(angka, out terdekat);
3if (BerupaFaktor) Console.WriteLine(angka + " adalah kelipatan 3");
4else Console.WriteLine(angka + " bukan kelipatan 3. Kelipatan terdekat: " +
5terdekat);

Method rekursif pada C#


Suatu method dapat dipanggil dari method lain pada class yang sama yang bukan method
static (method static akan dijelaskan segera). Sebagai contoh:

?
1public void PemisahBesar() {
2 for (int i = 1; i <= 5; i++) Pemisah();
3}

Method yang memanggil dirinya sendiri di dalam dirinya disebut method rekursif. Sebagai
contoh:

?
1public int faktorial(int n) {
2 if (n <= 1) return 1;
3 return faktorial(n - 1) * n;
4}

Silahkan coba panggil method di atas dengan perintah Console.WriteLine("Factorial of


5: " + met.factorial(5));. Program akan menampilkan 120 ke layar. Nilai 120 berasal
dari:

faktorial(5)
faktorial(4) * 5
faktorial(3) * 4 * 5
faktorial(2) * 3 * 4 * 5
faktorial(1) * 2 * 3 * 4 * 5
1 * 2 * 3 * 4 * 5
120
Method static pada C#
Method static adalah method yang dapat diakses tanpa meng-instantiate (membuat objek)
suatu class. Method static dapat dipanggil langsung dari class. Karena ia dapat dipanggil
tanpa meng-instantiate classnya, kata kunci "this" tidak dapat digunakan di dalam method
static. Class static juga tidak dapat memanggil method yang lain yang berada pada class yang
sama tanpa meng-instantiate class tersebut, terkecuali method yang dipanggil juga suatu
method static.

Kita sebetulnya dapat membuat method-method lain selain method Main pada class Program
kita. Tetapi kita tidak akan bisa memanggil method tersebut dalam method main apabila
method tersebut bukan method static. Method static seperti method Main hanya dapat
memanggil method static lain di dalamnya. Sebagai contoh, buat method berikut pada class
Program:

?
1public static void Ulang(char karakter, int jumlah) {
2 for (int i = 1; i <= jumlah; i++) Console.Write(karakter);
3 Console.WriteLine();
4}

Dan panggil method tersebut pada method Main:

?
1Ulang('*', 30);

Program akan menampilkan karakter bintang 30 kali. Apabila kita mendeklarasikan method
di atas pada class ContohMethod, kita memanggil method tersebut dengan cara:

?
1ContohMethod.Ulang('*', 30);

Field dan property pada C#


Field sebetulnya merupakan variabel sederhana yang dideklarasikan di dalam class. Dalam
OOP, meskipun field lebih mudah dibuat daripada properties, banyak orang lebih
menyarankan penggunaan properties daripada fields. Kelebihan menggunakan properties
antara lain:

Dapat menyembunyikan atau menjaga implementasi kode. Sebagai contoh, kita


dapat menolak memasukkan suatu nilai ke dalam suatu properties apabila nilai
tersebut tidak memenuhi kondisi tertentu.
Kita dapat mencatat akses pembacaan atau perubahan properties dengan cara
menambahkan kode pelacak ke dalam method getter dan setter.
Dapat diakses dengan reflection (tidak akan dibahas di sini).
Dapat digunakan untuk data binding.
Field pada C#:

?
1public int Jumlah;

Properties pada C#:

?
1
2private int jumlah;
public int Jumlah {
3 get {
4 return jumlah;
5 }
6 set {
7 } jumlah = value;
8}
9

Pada mulanya, suatu property adalah gabungan sebuah field private, sebuah method getter
dan sebuah method setter. Akan tetapi pada C#, property dikemas menjadi satu dengan getter
dan setternya. Di bawah ini adalah syntax deklarasi property pada C# yang bahkan lebih
singkat lagi:

?
1public int Jumlah { get; set; }

Pada suatu property, jika suatu setter tidak buat, maka property tersebut menjadi property
readonly. Dan apabila getternya dihilangkan, property tersebut akan menjadi property
writeonly. Di bawah ini adalah contoh-contoh properties pada C#:

?
1 public class Siswa {
public string Nama { get; set; }
2
public DateTime TglLahir { get; private set; }
3 //Umur (tahun) dihitung otomatis berdasarkan TglLahir
4 public int Umur {
5 get {
6 //Umur dalam tipe data TimeSpan
TimeSpan ts = DateTime.Now - TglLahir;
7 //Konversi balik ke DateTime agar mudah
8 DateTime umur = DateTime.MinValue + ts;
9 //Karena DateTime.MinValue bernilai 0001-01-01,
10 //Kurangkan 1 dari tahun umur.
11 return umur.Year - 1;
}
12 }
13
14 private double kuis, uts, uas;
15 public double Kuis {
16 get { return kuis; }
set {
17 if (value < 0 || value > 100) Console.WriteLine("Nilai tidak
18valid");
19 kuis = value;
20 }
21 }
public double Uts {
22 get { return uts; }
23 set {
24 if (value < 0 || value > 100) Console.WriteLine("Nilai tidak
25valid");
uts = value;
26 }
27 }
28 public double Uas {
29 get { return uas; }
30 set {
if (value < 0 || value > 100) Console.WriteLine("Nilai tidak
31valid");
32 uas = value;
33 }
34 }
35}
36
37
38
39

Pada contoh di atas, Nama adalah suatu property sederhana TglLahir adalah suatu property
readonly. Umur adalah suatu property readonly dengan nilai yang dihitung, properties
sisanya: Kuis, Uts dan Uas adalah properties sederhana dengan sedikit batasan nilai.

Ingat bahwa identifier pada C# bersifat case sensitive. Identifier uas berbeda dari identifier
Uas. Ada sistem penamaan pada C# yang menggunakan huruf kecil untuk field private (kuis,
uts, uas) dan huruf besar di awal untuk nama property seperti di atas (Kuis, Uts, Uas). Ada
juga yang menggunakan underscore di depan field yang private misalnya _kuis, _uts, _uas.
Ini hanya masalah penamaan sederhana, akan tetapi kita sebaiknya konsisten dalam
menggunakan sistem penamaan ini, karena hal ini akan sangat membantu dalam mengelola
kode program kita.

Properties static pada C#


Pada bagian sebelumnya, kita telah memahas mengenai method static. Property static mirip
dengan method static. Property static dapat diakses tanpa meng-initialize suatu class.
Property static dapat dianggap sebagai properties yang mencakup satu class. Property static
diakses dan diubah langsung dari nama class. Sebagai contoh, kita tambahkan constructor dan
property static berikut ke class Siswa:

?
1 public Siswa(string nama, DateTime tgllahir) {
2 Jumlah += 1;
3 this.Nama = nama;
this.TglLahir = tgllahir;
4 this.kuis = 0;
5 this.uts = 0;
6 this.uas = 0;
7 }
8
9 public static int Jumlah { get; set; }
10

Di bawah ini adalah contoh cara menggunakan properties static:

?
1
2 class Program {
static void Main(string[] args) {
3 Siswa.Jumlah = 0;
4 Siswa Jane = new Siswa("Jane", new DateTime(1990, 5, 20));
5 Siswa Steven = new Siswa("Steven", new DateTime(1989, 3, 2));
6 Console.WriteLine(Siswa.Jumlah); //Menampilkan 2
7
Console.ReadKey();
8 }
9 }
10

Pada contoh di atas Property static Jumlah tidak dapat diakses melalui Jane.Jumlah ataupun
Steven.Jumlah. Melainkan harus diakses langsung dari Siswa.Jumlah, di mana Siswa adalah
Class, bukan Object. Hal ini hanya dapat dilakukan pada properties static.

Di bawah baris Siswa.Jumlah = 0, dibuat dua buah objek Siswa, yaitu Jane dan Steven.
Kedua objek tersebut dibuat dengan fungsi new Siswa, yaitu fungsi constructor yang
didefinisikan pada blok program public Siswa. Di dalam constructor tersebut, ada perintah
Jumlah += 1, yang akan menambahkan 1 ke property static Jumlah. Sehingga setelah dua
objek dibuat, maka Siswa.Jumlah akan bernilai 2.

Collection pada C#
Meskipun array pada C# dapat menyimpan banyak nilai sekaligus, mereka tidak dapat
mengubah ukurannya secara dinamis. Class-class collection pada C# mirip dengan Array,
tetapi dapat diubah ukurannya secara dinamis. Ada banyak class yang tersedia Collections
pada C#. Di bawah ini adalah beberapa contoh program yang menggunakan Collections.
Akan tetapi, sebelum itu, Saya ingin memperkenalkan perulangan foreach pada C# yang
sangat berguna ketika digabungkan dengan Collection. Struktur perulangan foreach adalah:

1foreach ([Tipe data item] [IdentifierItem] In [Collection]) {

2 //Hal yang dilakukan

3 //Contoh: Console.WriteLine([IdentifierItem]);

4}

List pada C#
Di bawah ini adalah contoh suatu program yang menggunakan List pada C#. Method yang
penting pada List adalah Add, Remove, RemoveAt, dan Contains. Untuk method Remove
dan Contains, kita perlu mengoverride method Equals.

1 class Program {

2 static void Main(string[] args) {

3 Sales oSales = new Sales(1);

oSales.AddItem("Coca Cola", 3);


4
oSales.AddItem("Sprite", 3);
5
oSales.AddItem("Fanta", 5);
6
oSales.RemoveLast();
7
oSales.AddItem("Coca Cola", 5);
8
oSales.AddItem("Fanta", 3);
9 oSales.RemoveItem(new Sales.SalesItem() { Name = "Sprite" });

10 oSales.RemoveItem(new Sales.SalesItem() { Name = "Sprite" });

11 oSales.ShowItems();

12 Console.ReadKey();

13 }

}
14

15
public class Sales {
16
public int ID { get; set; }
17
public DateTime TanggalBeli { get; set; }
18
public List<SalesItem> Items { get; private set; }
19

20
public Sales(int newid) {
21 this.ID = newid;

22 TanggalBeli = DateTime.Now;

23 Items = new List<SalesItem>();

24 }
25

26 public bool AddItem(string name, int jumlah) {

27 SalesItem itemBaru = new SalesItem() { Nama = name, Jumlah = jumlah


};
28
if (!Items.Contains(itemBaru)) {
29 Items.Add(itemBaru);

30 Console.WriteLine(itemBaru.Nama + " telah ditambahkan");

31 return true;

32 } else {

Console.WriteLine(itemBaru.Nama + " telah ditambahkan sebelumnya");


33
return false;
34
}
35
}
36
public bool RemoveItem(SalesItem item) {
37
if (!Items.Contains(item)) {
38 Console.WriteLine("Item tidak ditemukan");

39 return false;

40 }

41 Items.Remove(item);

42 Console.WriteLine(item.Nama + " telah diremove");

return true;
43
}
44
public bool RemoveLast() {
45
if (Items.Count == 0) {
46
Console.WriteLine("Tak ada item");
47
return false;
48 }

49 Console.WriteLine(Items[Items.Count - 1].Nama + " telah diremove");

50 Items.RemoveAt(Items.Count - 1);

51 return true;
52 }

53 public void ShowItems() {

Console.WriteLine("------- Daftar Item ----------");


54
foreach (SalesItem i in Items) {
55
Console.WriteLine(i.Nama + ": " + i.Jumlah);
56
}
57
Console.WriteLine("--------------------------------");
58
}
59

60 public class SalesItem {

61 public string Nama { get; set; }

62 public int Jumlah { get; set; }

63

64 //Digunakan untuk Contains dan Remove, untuk membandingkan objek

public override bool Equals(object obj) {


65
//Dengan var, C# akan otomatis mengetahui bahwa Other adalah
66SalesItem

67 var Banding = obj as SalesItem;

68 if (Banding.Nama == this.Nama) return true;

69 return false;

70 }

}
71
}
72

73

74

75

76

77

Dictionary pada C#
Dictionary (kamus) pada C# berisi pasangan-pasangan key dan value. Tipe item pada
Dictionary adalah KeyValuePair<tipeKey, tipeValue>. Berikut adalah contoh program yang
menggunakan Dictionary:

1 class Program {
static void Main(string[] args) {
2
Dictionary<string, string> InggrisIndonesia = new Dictionary<string,
3 string>();

5 InggrisIndonesia.Add("Get", "Ambil");

6 InggrisIndonesia.Add("Like", "Seperti");

7 InggrisIndonesia.Add("Book", "Buku");

InggrisIndonesia.Add("I", "Saya");
8
InggrisIndonesia.Add("Code", "Kode");
9
InggrisIndonesia.Add("For", "Untuk");
10
InggrisIndonesia.Add("Money", "Uang");
11

12
foreach (KeyValuePair<string, string> kv in InggrisIndonesia) {
13
Console.WriteLine(kv.Key + " = " + kv.Value);
14 }

15 Console.WriteLine("---------------------------");

16 Console.Write("Bahasa Indonesia dari: ");

17 string cari = Console.ReadLine();

if (InggrisIndonesia.ContainsKey(cari)) {
18
Console.WriteLine(InggrisIndonesia[cari]);
19
} else {
20
Console.WriteLine("Kata tidak ditemukan");
21
}
22
Console.ReadKey();
23
}
24}
25

26

Queue pada C#
Ada 2 class Queue pada C#. Satu berada di bawah namespace System.Collections, yang lain
berada di bawah namespace System.Collections.Generic. Pada program di bawah, kita
menggunakan class Queue Generic:

1 class Program {

2 static void Main(string[] args) {

3 Queue<Pelanggan> antrian = new Queue<Pelanggan>();

antrian.Enqueue(new Pelanggan("Fandi", "62852 XXXX YYY"));


4
antrian.Enqueue(new Pelanggan("Susanto", "62813 XXXX YYY"));
5
antrian.Enqueue(new Pelanggan("Billy", "62819 XXX YYYY"));
6

7
Pelanggan Dilayani;
8
for (int i = 1; i <= 3; i++) {
9
Dilayani = antrian.Dequeue();
10 Console.WriteLine("Antrian No." + Dilayani.NoAntrian + ", Tuan." +
Dilayani.Nama + " sedang dilayani");
11
}
12

13
Console.ReadKey();
14
}
15
}
16

17 class Pelanggan { //Access modifier tidak ditulis = internal

18 public static int NoAntrianBerikutnya = 1;

19 public string Nama { get; set; }

20 public string Telepon { get; set; }


21 public int NoAntrian { get; set; }

22 public Pelanggan(string nama, string telp) {

this.Nama = nama;
23
this.Telepon = telp;
24
this.NoAntrian = NoAntrianBerikutnya++;
25
//Berarti: NoAntrian = NoAntrianBerikutnya
26
//Kemudian: NoAntrianBerikutnya++
27
}
28 }

29

30

Masih ada banyak class Collection pada C#. Tetapi kita tidak akan membahas semuanya di
sini. Untuk daftar class Collection pada C# yang lengkap, kunjungi MSDN.

LINQ pada C#
LINQ (Language-Integrated Query) pada C# merupakan cara sederhana untuk memanggil
atau memproses data pada suatu Collection. Kita dapat menggunakan LINQ misalnya
untuk memfilter, mengurutkan atau bahkan menggabungkan data di dalam Collection. Cara
paling sederhana untuk menggunakan LINQ adalah:

from [IdentifierItem] in [collection] where [kondisi] select


[IdentifierItem]

Di bawah ini adalah contoh penggunaan LINQ:

1 class Program {
static void Main(string[] args) {
2
List<Mahasiswa> Mhs = new List<Mahasiswa>() {
3
new Mahasiswa("Fandi", "Fisika", 2001),
4
new Mahasiswa("Agung", "Fisika", 2001),
5
new Mahasiswa("Jon", "Fisika", 2000),
6
new Mahasiswa("Arthur", "Fisika", 2000),
7 new Mahasiswa("Hendera", "Kimia", 2001),
8 new Mahasiswa("Kurniawan", "Kimia", 2001),

9 };

10
Console.WriteLine("Mahasiswa tahun 2001:");
11
IEnumerable<Mahasiswa> tahun2001 = from m in Mhs where m.TahunMasuk
12== 2001 select m;

13 foreach (Mahasiswa m in tahun2001) {

14 Console.WriteLine(m);

15 }

16
Console.WriteLine("\nMahasiswa Fisika:");
17
List<Mahasiswa> fisika = (from m in Mhs where m.Jurusan == "Fisika"
18select m).ToList();

19 foreach (Mahasiswa m in fisika) {

20 Console.WriteLine(m);

21 }

22

23 Console.WriteLine("\nMahasiswa Fisika tahun 2001:");

IEnumerable<string> fisika2001 = from m in Mhs where m.Jurusan ==


24
"Fisika" && m.TahunMasuk == 2001 select m.Nama;
25 foreach (string nama in fisika2001) {

26 Console.WriteLine(nama);

27 }

28

29 Console.ReadKey();

}
30
}
31

32

Untuk contoh di atas, kita memerlukan class Mahasiswa:

?
1
class Mahasiswa {
2
public string Nama { get; set; }
3
public string Jurusan { get; set; }
4
public int TahunMasuk { get; set; }
5
public Student(string nama, string jurusan, int tahun) {
6 this.Nama = nama;

7 this.Jurusan = jurusan;

8 this.TahunMasuk = tahun;

9 }

10 public override string ToString() {

return "Nama : " + Nama


11
+ "\nJurusan: " + Jurusan
12
+ "\nTahun : " + TahunMasuk
13
+ "\n--------------------";
14
}
15
}
16

Nilai hasil LINQ adalah berupa IEnumerable. IEnumerable adalah suatu Collection yang
cocok digunakan dengan perulangan foreach. Tetapi hasil ini juga dapat langsung dikonversi
menjadi List seperti contoh LINQ yang kedua di atas. Contoh yang ketiga, menunjukkan
bahwa LINQ juga dapat hanya mengambil satu member objek saja. Untuk teknik yang lebih
lanjut mengenai LINQ, dapat mengunjungi MSDN.

String pada C#
String adalah tipe data yang sangat banyak digunakan. Sehingga string menjadi suatu tipe
data yang penting. Berikut adalah beberapa kode yang berguna terkait dengan string:

Substring pada C#
Substring adalah suatu method yang berguna untuk mengamil sebagian string. Pada C#,
Substring adalah method dari objek-objek String:
[suatuString].Substring([mulai], [banyakKarakter]);

Mulai adalah posisi mula bagian string yang akan diambil. Posisi ini berindex mulai dari nol.
Banyak karakter bersifat opsional. Jika banyak karakter tidak disertakan, Substring akan
mengambil semua karakter dimulai dari posisi mulai. Berikut adalah contoh penggunaan
Substring:

?
1
2 class Program {
3 static void Main(string[] args) {
4 string kode = "P201203CX021";
string strTahun = kode.Substring(1, 4);
5 string strBulan = kode.Substring(5, 2);
6 string lokasi = kode.Substring(7, 2);
7 string strNo = kode.Substring(9);
8
9 Console.WriteLine(strTahun); //2012
10 Console.WriteLine(strBulan); //03
Console.WriteLine(lokasi); //CX
11 Console.WriteLine(strNo); //021
12 Console.ReadKey();
13 }
14}
15

String.Format pada C#
Ada banyak kasus ketika kita perlu merepresentasikan suatu tanggal atau angka dengan
bentuk-bentuk yang berbeda. Kita mungkin perlu memformat suatu tanggal ke dalam format
SQL, atau kita mungkin perlu menampilkan harga dengan titik pemisah ribuan. Untuk tujuan-
tujuan ini, method Format sangat berguna. Syntax untuk method Format adalah:

?
1suatuString.Format( [formatString], objTarget );
2suatuString.Format( [FormatProvider], [formatString], objTarget );
3suatuString.Format( [formatString], [ArrayObject] );

Ada beberapa cara lain untuk menggunakan method Format, tetapi method-mehod di atas
sudah cukup untuk mewakili mereka. Contoh penggunaan String.Format:

?
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Globalization;
6
7 namespace Learning3 {
8 class Program {
9 static void Main(string[] args) {
10 DateTime sekarang = DateTime.Now;
11 string strSekarang = string.Format("Tanggal sekarang: {0:yyyy-MM-
12 dd}", sekarang);
Console.WriteLine(strSekarang);
13
14 double harga = 45.99;
15 string strHarga = string.Format("{0:C3}", harga);
16 Console.WriteLine(strHarga); //$45.990
17
18 double hargaId = 29000;
CultureInfo id = new CultureInfo("id-ID");
19 string strHargaId = string.Format(id, "{0:C}", hargaId);
20 Console.WriteLine(strHargaId); //Rp.29.000
21
22 double pecahan = 23.0 / 3.0;
23 string strPecahan = string.Format("{0:N3}", pecahan);
24 Console.WriteLine(strPecahan); //7.669
25
double persen = 0.125;
26 string strPersen = string.Format("{0:P}", persen);
27 Console.WriteLine(strPersen); //12.50 %
28
29 string gabungan = string.Format("tanggal: {0:dd MMMM yyyy}, harga:
30 {1:C}, diskon: {2:P}", new object[] { sekarang, hargaId, persen });
Console.WriteLine(gabungan); //Tanggal: 29 October 2013, harga:
31$29,000.00, diskon: 12.50 %
32 Console.ReadKey();
33 }
34 }
35}
36
37

Perhatikan bahwa kita menambahkan perintah "using System.Globalization" di atas


namespace untuk menggunakan namespace System.Globalization. Kita menambahkan baris
ini agar kita dapat merujuk ke class System.Globalization.CultureInfo dengan mengetik
hanya CultureInfo saja, daripada nama panjangnya (System.Globalization.CultureInfo).

FormatString pada contoh di atas adalah:

Memformat tanggal, yyyy mewakili tahun, MM mewakili bulan dalam dua digit, dd
mewakili tanggal, pada contoh terakhir, MMMM mewakili nama lengkap suatu bulan.
Memformat angka, N mewakili angka. N0 mewakili angka tanpa desimal, N2
mewakili angka dengan dua desimal.
Memformat uang, C mewakili mata uang. C2 mewakili mata uang dengan dua
desimal.
Memformat persen, P mewakili persen.

Kurung kurawal adalah posisi dimana variabel yang telah diformat akan ditempatkan. Contoh
ketiga menunjukkan hal ini. Variabel sekarang, hargaId dan persen akan diformat dan
ditempatkan pada kurung kurawal bernomor 0, 1, dan 2 secara berurutan.

Split and Join pada string di C#


Terkadang ketika membuat suatu program, kita perlu memecah suatu string menjadi
potongan potongan string, atau sebaliknya, menggabungkan mereka. Berikut adalah contoh
memecah dan menggabungkan string:

?
1
2 class Program {
3 static void Main(string[] args) {
string kalimat = "Sukses datang kepada mereka yang berkerja keras.";
4
string[] katakata = kalimat.Split(' ');
5 foreach (string kata in katakata) {
6 Console.WriteLine(kata);
7 }
8
9 int[] deret = { 1, 2, 4, 8, 16, 32 };
string strDeret = string.Join(" + ", deret);
10 Console.WriteLine(strDeret); //1 + 2 + 4 + 8 + 16 + 32
11
12 Console.ReadKey();
13 }
14}
15

Saya rasa contoh di atas sudah cukup jelas menjelaskan dirinya sendiri.

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 {
1
public int x;
2
public int y;
3
public double panjang;
4
public double lebar;
5
public double tinggi;
6
7 public Block(int x, int y, double panjang, double lebar, double tinggi) {

8 this.x = x;

this.y = y;
9
this.panjang = panjang;
10
this.lebar = lebar;
11
this.tinggi = tinggi;
12
}
13
}
14

15

Sekarang mari kita coba perilaku tipe data nilai:

1
class Program {
2
static void Main(string[] args) {
3
Balok b1 = new Balok(0, 0, 5, 3, 7);
4
Balok b2 = b1;
5 b2.x = 5;

6 b2.y = 10;

7 Console.WriteLine("Posisi b1: (" + b1.x + "," + b1.y + ")");

8 //Posisi b1: (0,0)

Console.WriteLine("Posisi b2: (" + b2.x + "," + b2.y + ")");


9
//Posisi b2: (5,10)
10
Console.ReadKey();
11
}
12
}
13

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:

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

6
R1.Bunuh(R2);
7
Console.WriteLine(R1.Status); //Hidup
8
Console.WriteLine(R2.Status); //Mati
9 Console.ReadKey();

10 }

11}

12

13class Robot {
public string Status;
14
public void Bunuh(Robot musuh) {
15
musuh.Status = "Mati";
16
}
17

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

21}

22
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#:

1
class Program {
2 static void Main(string[] args) {

3 Hari hariPertemuan = Hari.Rabu;

4 Console.WriteLine(hariPertemuan); //Rabu

6 Angka suatuAngka = (Angka) 5;

Console.WriteLine(suatuAngka);
7
Console.ReadKey();
8
}
9
}
10

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

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.

Database pada C#
Berurusan dengan database pada C#, pada dasarnya kita memerlukan paling tidak 4 dari
class-class berikut:

Connection untuk menghubungkan dengan database.


Command untuk menjalankan query pada database.
DataReader untuk mengenumerasi (membaca satu persatu) hasil query dari database
(sebagai DataRow).
DataAdapter untuk mempermudah berbagai macam operasi database, misalnya
membaca data dari database ke aplikasi.
DataTable untuk menyimpan data dari database dalam bentuk tabel.
DataSet untuk mengelola sekumpulan DataTable.

4 class pertama dari class-class di atas tidak benar-benar ada. Class-class tersebut merupakan
class yang spesifik terhadap database tertentu. Sebetulnya class-class tersebut di
atas merupakan class-class turunan dari class induk masing-masing fungsi. Sebagai contoh,
ketika Saya menyebutkan class Connection di atas, tergantung dari jenis databasenya, yang
saya maksud adalah: OleDbConnection, SqlConnection, MySqlConnection, OdbcConnection
atau NpgsqlConnection, yang merupakan class-class turunan dari class DbConnection.
Penggunaan class-class tersebut sangat mirip. Perbedaan antara mereka, tentunya ada pada
syntax SQL masing-masin DBMS (DataBase Management System).

Download yang diperlukan untuk menggunakan MySQL


pada C#
Sejauh ini, Saya paling banyak menggunakan MySQL. Jadi untuk topik database, kita akan
menggunakan class-class: MySqlConnection, MySqlCommand, MySqlDataReader, dan
MySqlDataAdapter. Untuk itu, pertama-tama kita memerlukan RDBMS (Relational DBMS)
MySQL. Anda bisa mendapatkan MySQL dari salah satu website di bawah ini:

MySQL: Jika Anda hanya ingin menginstall MySQL


saja. http://dev.mysql.com/downloads/mysql/
MariaDb: fork dari MySQL yang diprakarsai oleh pengagas
MySQL. https://mariadb.org/
XAMPP: salah satu dari paket aplikasi WAMP (Windows Apache MySQL PHP).
Dianjurkan apabila Anda juga ingin mencoba pemrograman
PHP. http://www.apachefriends.org/en/xampp.html
Appserv: paket aplikasi WAMP lainnya. Bagus, tetapi tidak dianjurkan karena
sepertinya tidak diupdate lagi. http://www.appservnetwork.com/

Dari pilihan di atas, lebih dianjurkan menggunakan MariaDB atau XAMPP. Selain MySQL,
kita juga memerlukan MySQL .NET Connector, yang hanya tersedia
di: http://dev.mysql.com/downloads/connector/net/6.6.html#downloads. Jika Anda
menggunakan Visual Studio 2012 atau 2013, download versi terbaru (6.7.4 atau di atasnya).
Akan tetapi jika Anda masih menggunakan Visual Studio 2010 seperti Saya, download versi
6.5.4 atau sub versinya. Versi-versi tersebut sesunguhnya tidak jauh berbeda, saran tadi hanya
agar dapat menggunakan Data Source Configuration Wizard, apabila Anda ingin
mencobanya sewaktu waktu. Akan tetapi kita masih bisa terhubung ke MySQL tanpa wizard
tesebut. Perlu diketahui juga bahwa wizard tersebut tidak tersedia pada Visual Studio 2010
Express.

Menambahkan reference ke MySQL pada C#


Dari menu bar, klik Project > Add Reference..., atau klik kanan pada References pada
Solution Explorer dan klik Add Reference... pada context menu. Suatu window Add
Reference akan tampil. Pada tab .NET, cari MySql.Data dan klik OK.
Dengan ini, kita siap untuk berkerja dengan database pada C#. Perlu diketahui juga apabila
menggunakan database selain MySQL, bahwa OleDb, SqlClient dan Odbc sudah tersedia
pada namespace System.Data, dan oleh karena itu, tidak perlu menambahkan reference untuk
menggunakan namespace tersebut.

Koneksi Database pada C#


Untuk menggunakan database pada C#, kita harus pertama-tama tersambung ke databasenya.
Untuk itu, kita menggunakan suatu objek Connection. Dalam kasus ini kita menggunakan
MySqlConnection. Pada dasarnya, kode untuk menyambungkan dengan database:

?
1var conn = new MySqlConnection();
2conn.ConnectionString = "Server=localhost; Uid=root; Pwd=123; Port=3306;";
3conn.Open();
4//Lakukan sesuatu dengan database
5conn.Close();

Agar Visual Studio dapat mengenali class MySqlConnection di atas, kita perlu menambahkan
perintah using MySql.Data.MySqlClient di atas deklarasi namespace. Tanpa perintah
using tersebut, kita akan harus
mengetikkan MySql.Data.MySqlClient.MySqlConnection pada saat membuat objek
koneksi di atas.

Deklarasi variabel menggunakan "var" di atas adalah suatu cara deklarasi variabel dengan
cara yang singkat. Visual Studio akan secara otomatis menentukan tipe data variabel conn di
atas berdasarkan nilai yang ditugaskan kepadanya. Baris pertama kode di atas bisa juga
ditulis:

?
1MySqlConnection conn = new MySqlConnection();

Dua baris pertama di atas juga dapat disingkat menjadi satu baris. Kita dapat langsung
memasukkan ConnectionString ke dalam Constructor class MySqlConnection:

?
var conn = new MySqlConnection("Server=localhost; Uid=root; Pwd=123;
1Port=3306;");

ConnectionString MySQL pada C#


Suatu ConnectionString berisi informasi yang dibutuhkan untuk terhubung ke database:

Server / Host, adalah alamat database server. Bisa berupa localhost atau 127.0.0.1
jika database server berada di komputer lokal, atau bisa juga alamat IP atau nama
domain dari komputer lain.
Uid / User Id / User, adalah username database yang digunakan untuk terhubung ke
database.
Pwd / Password, adalah password dari username di atas.
Port, adalah port database server. Port default untuk MySQL adalah 3306. Tidak
perlu ditulis apabila menggunakan port default.
Database, adalah nama database yang akan dipakai. Jangan gunakan parameter ini
jika tidak menggunakan database tertentu.

Parameter yang dipisah dengan garis miring di atas adalah alias. Sebagai contoh, kedua
ConnectionString di bawah sama-sama bisa dipakai:

?
1"Server=localhost; Uid=root; Pwd=123; Port=3306;"
2"Host=localhost; User=root; Password=123; Port=3306;"

Untuk informasi lebih lanjut untuk ConnectionString pada MySQL, dapat


melihat http://www.connectionstrings.com/mysql/.

Membuka dan menutup Connection


Method "Open" membuka koneksi ke database server, dan method "Close" melakukan
sebaliknya. Ketika melakukan sesuatu dengan database, baik membaca data atau menjalankan
perintah, penting untuk memastikan Connection sedang dalam kondisi terbuka (open). Dan
juga, suatu koneksi yang sedang terbuka tidak bisa dibuka kembali. Membuka suatu koneksi
yang sudah terbuka, akan menimbulkan error. Jadi, paling baik apabila kita mengetikkan
Open dan Close terlebih dahulu, baru kemudian kita menuliskan kode-kode operasi database
di dalamnya. Terkecuali, apabila menggunakan DataAdapter, koneksi otomatis diatur oleh
DataAdapter.
Menjalankan Query Database pada C#
Untuk menjalankan satu perintah DML (Data Manipulation Language) seperti INSERT,
UPDATE dan DELETE, kita membutuhkan satu Connection dan satu Command. Untuk
MySQL, kita membutuhkan MySqlConnection dan MySqlCommand. Berikut adalah contoh
eksekusi / menjalankan query database pada C#:

1 var conn = new


MySqlConnection("Host=localhost;Uid=root;Pwd=123;Database=kampus");
2
var cmd = new MySqlCommand("", conn);
3
//Parameter Constructor MySqlCommand di atas adalah
4
//CommandText dan Connection.
5
//Perintah di atas dapat diganti dengan:
6 //var cmd = new MySqlCommand();

7 //cmd.CommandText = "";

8 //cmd.Connection = conn;

10var nama = "Fandi";

11var gender = "Laki-laki";


var fakultas = "Fisika";
12
var tanggalDaftar = new DateTime(2001, 08, 08);
13
string query = string.Format("INSERT INTO mahasiswa (id, namalengkap,
14gender, fakultas, tanggaldaftar, updated) "

15 + "VALUES (NULL, '{0}','{1}','{2}', '{3}', NOW())", new object[] {

16 nama,

gender,
17
fakultas,
18
tanggalDaftar.ToString("yyyy-MM-dd")
19
});
20
//Isi dari string query di atas akan menjadi:
21
//"INSERT INTO mahasiswa (id, namalengkap, gender, fakultas,
tanggaldaftar, updated)
22
23//VALUES (NULL, 'Fandi', 'Laki-laki', 'Fisika', '2001-08-08', NOW())"

24

25cmd.CommandText = query;
//Masukkan perintah/query yang akan dijalankan ke dalam CommandText
26

27
conn.Open();
28
//Buka koneksi
29
cmd.ExecuteNonQuery();
30
//Jalankan perintah / query dalam CommandText pada database
31
conn.Close();
32//Tutup koneksi

33

CommandText adalah Properties untuk menyimpan query yang akan dikirim ke MySQL, dan
Connection adalah objek koneksi yang akan digunakan Command untuk terhubung ke
database. Kode-kode di atas akan menginsert satu baris ke tabel "mahasiswa" di dalam
database "kampus" yang ada di database server "localhost". Untuk membuat database yang
digunakan pada contoh di atas, jalankan perintah berikut pada database server MySQL anda:

1 #Buat database

2 CREATE DATABASE IF NOT EXISTS kampus;

3
#Aktifkan database
4
USE kampus;
5

6
#Buat tabel
7
CREATE TABLE IF NOT EXISTS mahasiswa (
8
id INT PRIMARY KEY AUTO_INCREMENT,
9
namalengkap VARCHAR(100),
10 gender VARCHAR(10),

11 fakultas VARCHAR(50),
12 tanggaldaftar DATETIME,

13 updated DATETIME )

engine=innodb;
14

15

Mengambil data dari database pada C#


Pada bagian ini, kita akan menggunakan database yang sama dengan bagian sebelumnya
yang dapat dibuat dengan query berikut:

1
#Buat database
2
CREATE DATABASE IF NOT EXISTS kampus;
3

4
#Aktifkan database
5
USE kampus;
6

7 #Buat tabel

8 CREATE TABLE IF NOT EXISTS mahasiswa (

9 id INT PRIMARY KEY AUTO_INCREMENT,

10 namalengkap VARCHAR(100),

gender VARCHAR(10),
11
fakultas VARCHAR(50),
12
tanggaldaftar DATETIME,
13
updated DATETIME )
14
engine=innodb;
15

Untuk membaca data dari database, terdapat paling tidak dua cara:

Menggunakan DataReader
Untuk menggunakan DataReader, kita memerlukan Connection, Command dan DataReader
itu sendiri. Perlu diketahui bahwa DataReader tidak memiliki Constructor. Kita harus mengisi
nilai DataReader menggunakan method ExecuteReader pada suatu objek Command. Berikut
contoh menggunakan DataReader:

var conn = new


1 MySqlConnection("Host=localhost;Uid=root;Pwd=123;Database=kampus");

2 var cmd = new MySqlCommand("SELECT id, namalengkap, gender, fakultas,


tanggaldaftar, updated FROM mahasiswa", conn);
3

4
//Koneksi harus terbuka untuk menjalankan ExecuteReader
5
conn.Open();
6
var r = cmd.ExecuteReader();
7 //Agar jelas, Anda juga bisa menuliskan:

8 //MySqlDataReader r = cmd.ExecuteReader();

10//Cek apakah DataReader memiliki baris data

11if (r.HasRows) {
//Method Read mencoba untuk membaca satu baris data dari database
12
//Menghasilkan true jika ada baris data, false apabila tidak ada
13baris data

14 r.Read();

15

16 Console.WriteLine("Data mahasiswa:");

17 //Membaca data perkolom dengan: r[index kolom / nama kolom]

Console.WriteLine(r[0]); //Kolom pertama:id (index 0)


18
Console.WriteLine(r[1]); //Kolom kedua:namalengkap (index 1)
19
Console.WriteLine(r[2]); //Kolom ketiga:gender (index 2)
20
Console.WriteLine(r["fakultas"]); //Dapat juga menggunakan nama kolom
21
Console.WriteLine(((DateTime)r["tanggaldaftar"]).ToString("dd MMMM
22yyyy"));

23 //Kode di atas langsung mengkonversi data menjadi DateTime, kemudian


menjadi string.
24 r.Close(); //Sebaiknya r (DataReader) ditutup setelah dipakai

25}
//Tutup koneksi setelah selesai membaca data
26
conn.Close();
27

Properties r, yaitu r.HasRows di dalam kondisi if di atas juga dapat diganti dengan r.Read()
jika kita ingin mengecek ada atau tidaknya suatu data sekaligus membaca satu baris data dari
database:

1 if (r.Read()) {
Console.WriteLine("Data mahasiswa:");
2
Console.WriteLine(r[0]); //Kolom pertama: (index 0)
3
Console.WriteLine(r[1]); //Kolom kedua:namalengkap (index 1)
4
Console.WriteLine(r[2]); //Kolom ketiga:gender (index 2)
5
Console.WriteLine(r["fakultas"]); //Dapat juga menggunakan nama kolom
6
Console.WriteLine(((DateTime)r["tanggaldaftar"]).ToString("dd MMMM
7 yyyy"));
//Kode di atas langsung mengkonversi data menjadi DateTime, kemudian
8
menjadi string.
9 r.Close(); //Sebaiknya r (DataReader) ditutup setelah dipakai

10}

Dan apabila kita ingin membaca seluruh baris data yang ada pada DataReader, kita dapat
mengganti if menjadi while. Dan jangan lupa untuk memindahkan perintah r.Close() keluar
dari loop while:

while (r.Read()) {
1
Console.WriteLine("Data mahasiswa:");
2
Console.WriteLine(r[0]); //Kolom pertama: (index 0)
3
Console.WriteLine(r[1]); //Kolom kedua:namalengkap (index 1)
4
Console.WriteLine(r[2]); //Kolom ketiga:gender (index 2)
5
Console.WriteLine(r["fakultas"]); //Dapat juga menggunakan nama kolom
6 Console.WriteLine(((DateTime)r["tanggaldaftar"]).ToString("dd MMMM
yyyy"));
7
//Kode di atas langsung mengkonversi data menjadi DateTime, kemudian
8 menjadi string.

}
9
r.Close(); //Sebaiknya r (DataReader) ditutup setelah dipakai
10

Kita juga dapat memindahkan semua baris data pada DataReader ke dalam suatu DataTable:

var conn = new


1 MySqlConnection("Host=localhost;Uid=root;Pwd=123;Database=kampus");

2 var cmd = new MySqlCommand("SELECT id, namalengkap, gender, fakultas,


tanggaldaftar, updated FROM mahasiswa", conn);
3
//Suatu DataTabel baru bernama TabelMahasiswa
4
var dt = new DataTable("TabelMahasiswa");
5

6
//Koneksi harus terbuka untuk menjalankan ExecuteReader
7
conn.Open();
8 var r = cmd.ExecuteReader();

9 //Baca semua baris data yang dapat diambil dari r ke dalam DataTable dt

10dt.Load(r);

11conn.Close();

12

13//Kita dapat menggunakan DataTable meskipun koneksi telah ditutup


//Kapanpun kita mau
14
foreach (DataRow baris in dt.Rows) {
15
Console.WriteLine("Data mahasiswa:");
16
Console.WriteLine(baris[0]); //Kolom pertama:id (index 0)
17
Console.WriteLine(baris["namalengkap"]); //Kolom kedua:namalengkap
18(index 1)

Console.WriteLine(baris.Field<string>(2)); //Kolom ketiga: gender


19
berupa string
20 Console.WriteLine(baris.Field<string>("fakultas")); //Dapat juga
menggunakan nama kolom
21
Console.WriteLine(baris.Field<DateTime>("tanggaldaftar").ToString("dd
22MMMM yyyy"));

//Baris di atas langsung mengkonversi data menjadi DateTime, kemudian


23
menjadi string.

Menggunakan DataAdapter
Menggunakan DataAdapter sebetulnya tidak terlalu berbeda dari contoh DataReader terakhir
di atas. Satu kelebihan menggunakan DataAdapter adalah ia secara otomatis membuka dan
menutup koneksi:

1
var conn = new
MySqlConnection("Host=localhost;Uid=root;Pwd=123;Database=kampus");
2
var cmd = new MySqlCommand("SELECT id, namalengkap, gender, fakultas,
3 tanggaldaftar, updated FROM mahasiswa", conn);

4 var dt = new DataTable("TabelMahasiswa");

5 //Buat suatu DataAdapter, dan langsung menugaskan cmd di atas sebagai


SelectCommand-nya
6
var adap = new MySqlDataAdapter(cmd);
7
//Baca semua baris dari perintah cmd ke dalam DataTable
8 adap.Fill(dt);

10foreach (DataRow baris in dt.Rows) {

11 Console.WriteLine("Data mahasiswa:");

12 Console.WriteLine(baris[0]); //Kolom pertama:id (index 0)

13 Console.WriteLine(baris["namalengkap"]); //Kolom kedua:namalengkap


(index 1)
14
Console.WriteLine(baris.Field<string>(2)); //Kolom ketiga: gender
berupa string
15
Console.WriteLine(baris.Field<string>("fakultas")); //Dapat juga
16menggunakan nama kolom

17 Console.WriteLine(baris.Field<DateTime>("tanggaldaftar").ToString("dd
MMMM yyyy"));

//Baris di atas langsung mengkonversi data menjadi DateTime, kemudian


menjadi string.

Perlu diketahui bahwa selain membaca data dengan method Fill di atas, DataAdapter juga
dapat secara otomatis mengupdate baris-baris data yang berubah, menginsert baris-baris baru,
dan menghapus baris-baris data yang telah dihapus. Atau dengan kata lain, perubahan yang
terjadi pada DataTable dikirim juga secara otomatis ke database server. Semua itu dilakukan
hanya dengan satu Method: Update. Akan tetapi penggunaan method tersebut tidak akan
dibahas di sini.