Menggunakan ExpandoObject

Salah satu fitur menarik di .NET 4.0 adalah ExpandoObject. Dengan class ini, memungkinkan kita mengubah behavior dari sebuah objek dynamic secara runtime.

Misalkan kita akan membuat aplikasi sederhana dengan design form seperti ini:

image

  • Button “Car Info” untuk menampilkan informasi detail objek mobil.
  • Button “Run” untuk mulai menjalankan objek mobil.
  • Button “Previous Gear” untuk memindahkan posisi gear ke posisi sebelumnya
  • Button “Next Gear” untuk memindahkan posisi gear ke posisi berikutnya
  • Button “Stop” untuk menghentikan objek mobil.

Saat di-jalankan akan seperti berikut ini:

image

Pertama-tama, kita harus mendeklarasikan sebuah variable bertipe dynamic:

dynamic myCar;

Lalu objek tersebut harus dicreate dengan tipe ExpandoObject saat form di-load:

myCar = new System.Dynamic.ExpandoObject();

Lalu property objek tersebut dapat dibuat secara runtime, misalnya seperti ini:

myCar.Color = "Red";
myCar.Type = "Hatchback";
myCar.Doors = 4;
myCar.CurrentGear = 0;

Ini mengingatkan kita seperti membuat property pada sebuah objek di javascript.

Kita juga dapat membuat event secara run-time seperti ini:

myCar.GearsChanging = null;
myCar.GearsChanging += new EventHandler(
    delegate(object o, EventArgs args)
    {
        listBox1.Items.Add(
"Current gear: " + myCar.CurrentGear);
    });

Hmm……cukup menarik kan?

Berikutnya, kita dapat menambahkan method secara run-time, method ini dipanggil oleh masing-masing button dalam form tersebut.

myCar.GearsDown = (Action)(() => 
   { 
      myCar.CurrentGear—; 
      myCar.GearsChanging(myCar, new EventArgs()); 
   });

myCar.GearsUp = (Action)(() => 
   { 
      myCar.CurrentGear++; 
      myCar.GearsChanging(myCar, new EventArgs()); 
   });

myCar.Run = (Action)(() =>
   {
      myCar.CurrentGear = 1;
      listBox1.Items.Add("Now is running at gear: " + myCar.CurrentGear);
   });

myCar.Stop = (Action)(() =>
   {
      myCar.CurrentGear = 0;
      listBox1.Items.Add("Now is running at gear: " + myCar.CurrentGear + ". It's stopped.");
   });

Kita juga dapat melakukan method overriding secara run-time, kita dapat memanggil method ToString() yang telah di-override ini melalui button “Car Info”.

myCar.ToString = (Func<dynamic>)(() =>
    {
        return "Color: " + myCar.Color + "\n" +
               "Type: " + myCar.Type + "\n" +
               "Doors: " + myCar.Doors;
    });

Share this post: | | | |
Attachment: MyCar.zip
Published Tuesday, April 20, 2010 4:26 PM by paulus
Filed under: ,

Comments

# Twitter Trackbacks for Bermain-main dengan ExpandoObject [netindonesia.net] on Topsy.com

Pingback from  Twitter Trackbacks for                 Bermain-main dengan ExpandoObject         [netindonesia.net]        on Topsy.com

# Social comments and analytics for this post

Tuesday, April 20, 2010 8:51 PM by uberVU - social comments

This post was mentioned on Twitter by netindonesia: Bermain-main dengan ExpandoObject http://bit.ly/de1FHf

# re: Menggunakan ExpandoObject

Wednesday, April 21, 2010 6:22 AM by Husnin Mubarak

Thanks Om.

Potongan kode diatas ada pada file yang mana di MyCar ?

Pada saat buat project baru, template yang mana yang dipilih ?

Terimakasih.

# re: Menggunakan ExpandoObject

Wednesday, April 21, 2010 6:43 AM by paulus

Saya pakai template Windows Application, utk mudahnya download attachment nya saja pak. Semoga code saya bisa membantu.