Mendefinisikan Delegate Sebagai Static Member

14.4 Mendefinisikan Delegate Sebagai Static Member

Delegate juga dapat dibentuk dari anggota class yang bersifat static. Delegate pada contoh di bawah ini didefinisikan sebagai anggota static dari class printKoneksi. Klien tidak p erlu membuat instance dari delegate dalam method Main.

us i ng Sy s t em; us i ng Sy s t em. Col l ec t i ons ;

c l as s k onek s i DB { pr ot ec t ed s t at i c i nt Nmr Konek s i Ber i k ut = 1; pr ot ec t ed s t r i ng namaKonek s i ; publ i c s t r i ng NamaKonek s i

ge t { r et ur n namaKonek s i ;

} publ i c k onek s i DB( ) {

namaKonek s i = " Konek s i Dat abas e " + k onek s i DB. Nmr Konek s i Ber i k ut ++;

c l as s DBManager { pr ot ec t ed Ar r ay Li s t k onek s i Ak t i f ; publ i c DBManager ( ) {

k onek s i Ak t i f = new Ar r ay Li s t ( ) ;

f or ( i nt i = 1; i < 6; i ++) { k onek s i Ak t i f . Add( new k onek s i DB( ) ) ; }

} publ i c del egat e v oi d EnumKonek s i Cal l bac k (

k onek s i DB k onek s i ) ;

publ i c v oi d EnumKonek s i ( EnumKonek s i Cal l bac k c al l bac k ) {

f or eac h( k onek s i DB k onek s i in k onek s i Ak t i f )

c al l bac k ( k onek s i ) ;

c l as s St at i c Del egat e {

s t at i c DBManager . EnumKonek s i Cal l bac k pr i nt Konek s i = new DBManager . EnumKonek s i Cal l bac k ( Pr i nt Konek s i ) ;

publ i c s t at i c v oi d Pr i nt Kone k s i ( k onek s i DB k onek s i ) { Cons ol e. Wr i t eLi ne( " [ St at i c Del egat e. Pr i nt Konek s i ] { 0} " , k onek s i . NamaKonek s i ) ; } publ i c s t at i c v oi d Mai n( ) {

DBManager dbManager = new DBManager ( ) ; Cons ol e. Wr i t eLi ne( " [ Mai n] Memanggi l EnumKonek s i "

+ " - mas uk k an del egat e" ) ;

dbManager . EnumKonek s i ( pr i nt Konek s i ) ; Cons ol e. ReadLi ne( ) ;

Ketika anda menjalankan program di atas, hasil yang diperoleh sama dengan yang sebelumnya. Akan tetapi, obyek delegate sekarang bersifat static. Bagaimana hal ini terjadi? Anda mungkin akan menebak bahwa jika delegate dideklarasikan sebagai static, seharusnya tetap ada instance dari delegate tersebut, tapi dimana?

Dalam Common Language Infrastructure (CLR), suatu type static da pat berisi method yang dikenal sebagai type initializer yang bisa menginisialisasi dirinya sendiri. Aturan utama dari method ini adalah, harus static, tidak memiliki parameter, tidak ada ni lai balik dan dinamakan .cctor. Anda bisa melihat method ini dari MSIL seperti pada gambar

b erikut.

Gamb ar 14-4.Method .cctor adalah satu type initializer y ang digunakan oleh type static untuk menginisialisasi dirinya.