a.
Pengenalan Method
Method adalah
bagian dari tubuh program yang mengimplementasikan suatu action sehingga class atau object dapat bekerja. Method
diimplementasikan didalam class dan menyediakan informasi tambahan yang
mana class tidak dapat menangani sendiri. Sebelum
dilanjutkan tentang method, mungkin perlu diingat kembali bahwa class sendiri
memiliki anggota-anggota yaitu constants, fields, methods, properties,
events, indexers, operators, instance constructors, destructors,
static constructors, dan nested type declarations
Method dapat didefinisikan lagi yaitu
■
method yang memiliki beberapa parameter(tapi bisa kosong)
■
method dapat
mengembalikan nilai (kecuali tipe pengembaliannya void)
■
method dapat terdiri dari static atau non-static.
o Static
: method static hanya dapat di akses dari class.
o Non-static
: dapat di akses dari instances
Contoh dari method adalah seperti ini :
public class Stack
{
public static Stack Clone(Stack s) {...}
public static Stack Flip(Stack s) {...}
public object Pop() {...}
public void Push(object o) {...}
public override string ToString() {...}
}
class Test
{
static void Main()
{
Stack s = new Stack();
for (int i = 1; i < 10;
i++)
s.Push(i); Stack flipped = Stack.Flip(s); Stack cloned = Stack.Clone(s);
Console.WriteLine("Original
stack: " + s.ToString());
Console.WriteLine("Flipped
stack: " + flipped.ToString());
Console.WriteLine("Cloned
stack: " + cloned.ToString());
}
}
Contoh diatas memperlihatkan class stack yang memiliki beberapa static
methods(Clone dan Flip) dan beberapa non-static methods (Push, Pop dan
ToString).
b. Implementasi
methods
■
static methods
Method dapat di overload, artinya satu nama method
bisa dipakai berkali-kali selama dia memiliki sesuatu yang unik. Sesuatu
yang unik pada method tersebut dapat terdiri dari banyaknya parameter, tipe
parameter atau modifier parameter yang berbeda. Contohnya seperti dibawah ini :
class Test
{
static void F()
{
Console.WriteLine("F()");
}
static void F(object o)
{
Console.WriteLine("F(object)");
}
static void F(int value)
{
Console.WriteLine("F(int)");
}
static void F(ref int value)
{
Console.WriteLine("F(ref
int)");
}
static void F(int a, int b)
{
Console.WriteLine("F(int,
int)");
}
static void F(int[] values)
{
Console.WriteLine("F(int[])");
}
static void Main()
{
F();
F(1);
int i = 10;
F(ref i);
F((object)1);
F(1, 2);
F(new int[] { 1, 2, 3 });
Console.ReadLine();
}
}
Class diatas memiliki nama
method F tapi memiliki jumlah, tipe dan modifier yang berbeda. Output dari class
diatas jika di eksekusi adalah :
F()
F(int)
F(ref int)
F(object)
F(int, int)
F(int[])
C# dapat mengembalikan banyak nilai dari satu method dengan menggunakan
out parameter.
Contohnya seperti ini :
using System;
class OutTest
{
public static int Output(out int a)
{
a = 25;
return 0;
}
public static void Main()
{
int a;
Console.WriteLine(Output(out a));
Console.WriteLine(a);
Console.ReadLine();
}
}
hasilnya adalah : 0
25
static method juga
dapat mengembalikan lebih
dari satu variabel
dengan cara menggunakan keyword
params. Contohnya adalah seperti ini :
using System;
public class Params
{
public static void Parameter(params int[] list)
{
for (int x = 0; x < list.Length; x++) Console.WriteLine(list[x]);
Console.WriteLine();
}
public static void Main()
{
Parameter(10, 15, 20);
Console.ReadLine();
}
}
■ non-static
method
Telah dijelaskan sebelumnya bahwa static method dapat diakses hanya
melalui class sedangkan non-static method dapat diakses melalui instance.
Kita akan mencoba melihat bagaimana implementasi non-static method
dibandingkan dengan static method.
Buat satu console application project baru.
ketikan di dalam class1 seperti ini (copy – paste saja semua code
dibawah ini kedalam
class1.cs) :
using System;
namespace nonstatic
{
class First
{
public virtual void one()
{
Console.WriteLine("first
one");
}
}
class Second : First
{
public override void one()
{
Console.WriteLine("Second
one");
}
}
/// <summary>
/// Summary description for Class1.
/// </summary>
class Output
{
/// <summary>
/// The main entry point for the
application.
/// </summary>
[STAThread]
static void Main()
{
//
// TODO: Add code to start application
here //
Second y = new Second();
First x = y;
x.one();
y.one();
Console.ReadLine();
}
}
}
output code diatas menjadi :
second
one
second
one
Output ini terjadi karena objek x sudah di-instance oleh objek y dimana
objek y adalah class second yang turunan dari class First. (Penjelasan override
dan virtual dapat dibaca pada materi Object Oriented – Tunggu posting berikutnya mengenai Obejct Oriented).
jika class First dan class Second kita ubah
seperti ini :
class First
{
public void one()
{
Console.WriteLine("first
one");
}
}
class Second : First
{
public void one2()
{
Console.WriteLine("Second
one");
}
}
Maka output code yang dihasilkan adalah :
First one
First one
Output ini dihasilkan karena perubahan yang
dilakukan menyebabkan class Second menjadi memiliki 2 non-static method yaitu
method one dan method one2
Lalu, jika class First dan class Second kita
ubah lagi seperti ini :
class First
{
public static void one()
{
Console.WriteLine("first
one");
}
}
class Second : First
{
public void onen()
{
Console.WriteLine("Second
one");
}
}
Maka
akan muncul eror seperti ini :
Static member 'nonstatic.First.one()' cannot be
accessed with an instance reference; qualify it with a type name instead
Static member 'nonstatic.First.one()' cannot be
accessed with an instance reference;qualify it with a type name instead
Eror ini
memperlihatkan bahwa static method tidak dapat diakses menggunakan
instance.
c. Modifier
Berapa contoh implementasi method diatas memakai
modifier. Apa itu Modifier? Modifier adalah keyword yang digunakan untuk
menspesifikasi deklarasi pengaksesan suatu member atau tipe.
Ada 4 modifier pengaksesan yang akan diperlihatkan
:
■
public
■
protected
■
internal
■
private
Keempat level diatas akan dijelaskan pada tabel
dibawah ini :
Level akses
|
Arti
|
Public
|
Akses tidak
dibatasi
|
protected
|
Akses dibatasi pada classnya saja
atau tipe yang diturunkan dari class.
|
internal
|
Akses hanya dibatasi pada satu project yang sama.
|
private
|
Akses dibatasi
pada tipe.
|
Dengan
ke empat level akses ini, method dapat diberikan
pembatasan-pembatasanpengaksesan. Jika methods yang kita buat hanya ingin
diakses pada project tertentu, kita bisa memberikan modifier internal.
Kita akan coba
mengetahui bagaimana cara
kerja dari 4
modifier diatas. Cara pemakaian yang akan
kita lakukan dengan
membuat sebuah projek
windows application.
Langkah-langkahnya adalah sebagai berikut :
1. Buat
sebuah projek baru.
2. Pilih
windows application.
3. Berikan
nama projeknya “modifier”.
4. Sebuah
projek dan satu buah windows form telah dibuat. Kita klik dan drop sebuah
kontrol textbox dan sebuah kontrol button.
6. Klik dua kali kontrol button dan kita akan mendapati
cursor telah berada di :
private void button1_Click(object sender, EventArgs e){
}
8.
Selanjutnya, kita coba membuat satu projek lagi.
Kita akan tambahkan sebuah Projek class library. Beri nama ClassLibrary
9.
Setelah terbentuk, kita akan menambahkan projek
ClassLibrary kedalam projek modifier dengan cara Project > add reference
> pilih tab Project > pilih ClassLIbrary pada Project Name dengan
mengklik tombol Select >OK.
10.
Didalam ClassLibrary, kita mendapatkan sebuah Class
bernama Class1. Namespace ClassLibrary kita ganti menjadi modifier.ClassLibrary
sehingga isinya adalah sebagai berikut :
using System;
namespace modifier.ClassLibrary
{
public class Class1
{
public Class1
{
}
}
}
11.
Tambahkan sebuah method pada Class public class
Class1() dibawah method public Class1 seperti ini:
public string A()
{
return "Ronaldo";
}
Kembali ke method private void button1_Click, kita isikan
dengan code :
private void button1_Click(object sender, EventArgs e)
{
ClassLibrary.Class1 x = new ClassLibrary.Class1();
this.textBox1.Text = x.A();
}
12.
Klik run. Kita akan mendapatkan textbox berisi “Ronaldo”
Bagaimana jika modifier string A() pada Class Class1 diganti dengan private,
internal dan protected ?
ternyata masing-masing mengucapkan
eror yang sama
: 'modifier.ClassLibrary.Class1.A()' is inaccessible due to its
protection level. Sekarang kita akan mencoba penggunaan modifier internal. Kita
akan menambahkan sebuah method dibawah method public string A () dengan code
seperti ini :
internal string B()
{
return "Morientes";
}
Kembali ke method private void button1_Click, kita isikan dengan code :
private void button1_Click(object sender, EventArgs e)
{
ClassLibrary.Class1 x = new ClassLibrary.Class1();
this.textBox1.Text = x.B();
}
Ternyata eror yang keluar adalah
seperti berikut : 'modifier.ClassLibrary.Class1.A()' is inaccessible due to its
protection level
Hal ini terjadi karena internal
hanya dapat diakses hanya didalam project ClassLibrary tersebut seperti yang
telah disebutkan diatas.
Jika public string A() kita ubah
menjadi seperti ini :
public string A()
{
return B();
}
Lalu method private void
button1_Click, kita isikan dengan code :
private void button1_Click(object sender, EventArgs e)
{
ClassLibrary.Class1 x = new ClassLibrary.Class1();
this.textBox1.Text = x.A();
}
Kemudian jika kita klik run lalu
klik button yang memunculkan “morientes” pada textbox, maka kita dapat melihat
penggunaan internal hanya dapat dipakai didalam projek tersebut. Kita akan
mencoba penggunaan protected.
Dikatakan sebelumnya bahwa
Akses modifier protected dibatasi pada classnya saja atau tipe yang
diturunkan dari class. Kita ubah isi dari class1.cs menjadi seperti ini :
using System;
namespace modifier.ClassLibrary
{
public class Class1
{
public Class1()
{
}
protected string A()
{
return "Zidane";
}
}
public class Class2 : Class1
{
public string B()
{
string x;
Class1 a = new Class1();
x = a.A(); return x;
}
}
}
Lalu method private void
button1_Click, kita isikan dengan code :
private void button1_Click(object sender, EventArgs e)
{
ClassLibrary.Class2 x = new
ClassLibrary.Class2();
this.textBox1.Text = x.B();
}
Eror yang akan kita dapatkan
adalah :
Cannot access protected member 'modifier.ClassLibrary.Class1.A()'
via a qualifier of type 'Class1'; the qualifier must be of type 'Class2' (or
derived from it).
Statement x = a.A() memunculkan
eror karena Class1 tidak diturunkan dari Class2. (seharusnya Class2 diturunkan
dari Class1).
Tapi jika isi method public
string B() kita ubah menjadi :
public string B()
{
string x;
//Class1 a = new
Class1();
Class2 b = new Class2();
//x = a.A();
x = b.A();
return x;
}
Maka kita akan mendapatkan isi
dari textbox adalah “Zidane”
mantab boss, sangat detail
ReplyDelete