Reyza

tenang, senang, sederhana
See also: Other Geeks@INDC

Extension Method ?

Jangan pikirkan dulu maksud judul blog ini.

Pernah melihat atau menggunakan kode seperti dibawah ini ?

namespace TestNamespace

{

   public static class TestClass

   {

     public static bool IsMyEmailAddress(string s)

     {

       if (s.Equals("reza@dycode.com"))

       { return true;}

       else { return false;}

     }

   }

}

Kemudian kita akan menggunakan baris kode di atas itu seperti baris kode di bawah ini :

using TestNamespace;

namespace ClassLibrary3

{

   public class Class1

   {

     public void Test()

     {

        string email = "reza@dycode.com";

        bool myEmail = ExtensionMethodExample.IsValidEmailAddress(email);

     }

  }

}

Bila telah menggunakan Visual Studio yang support .NET Framework 3.5, artinya mesti VS2008 entah itu yang express atau versi berbayar maka bisa menggunakan 'cara lain' yaitu dengan menggunakan Extension Method. Extension method ini tidak dapat digunakan apabila target solution menggunakan .NET Framework 2.0 atau 3.0. Cara pembuatan method ini hampir tidak jauh berbeda dengan cara di atas, berikut contohnya :

namespace ExtensionMethod

{

   public static class ExtensionMethodExample

   {

      public static bool IsMyEmailAddress(this string s)

      {

         if (s.Equals("reza@dycode.com"))

         { return true; }

         else { return false;}

      }

    }

}

Bedanya hanya ada penambahan keyword this ada 'kolom' parameter. Penggunaan method ini pun masih bisa dengan cara yang telah dilakukan di atas, tetapi juga bisa digunakan dengan cara berikut :

namespace ClassLibrary3

{

   public class Class1

   {

      public void Test()

      {

         string email = "reza@dycode.com"; 

         bool myEmail = email.IsValidEmailAddress();

      }

   }

}

Kode di atas adalah contoh dari Extension Method, bahasa sederhananya adalah method tambahan yang langsung dapat digunakan pada suatu objek karena method tersebut seperti menjadi bagian method yang dimiliki oleh objek tersebut (lihat gambar di atas).

Kalau menurut om ScottGu, Extension Method adalah :

"Extension methods allow developers to add new methods to the public contract of an existing CLR type, without having to sub-class it or recompile the original type. Extension Methods help blend the flexibility of "duck typing" support popular within dynamic languages today with the performance and compile-time validation of strongly-typed languages.".

Dengan Extension Method ini kita dapat membuat 'seperti' apa yang bisa kita lihat pada LINQ.

Contoh yang lain adalah method berikut :

public static bool AdaDalam(this object o, IEnumerable c)

{

   foreach (object i in c)

   {

      if (i.Equals(o))

      { return true; }

   }

   return false;

}
 

Dan berikut cara penggunaannya :

string[] programmingLanguage = { "C#", "PHP", "Java" };

int[] daftarAngka = { 3, 13, 23 }; 

bool apakahAda = "PHP".AdaDalam(programmingLanguage);

bool adaAngka = 13.AdaDalam(daftarAngka);

Dengan Extension Method maka penulisan kode akan lebih mudah, karena kita tidak perlu menulis class seperti yagn telah dicontohkan pada kode paling atas, dan dengan ini mungkin kita akan lebih dekat dengan LINQ :)

Share this post: | | | |
Posted: Dec 21 2007, 03:05 AM by reyza | with 1 comment(s)
Filed under:

Comments

Bebin said:

Cool.

Coba bro, dijabarkan, classes apa aja di Fx 3.5 yang secara default mendapat extension methods. Terutama classes yg bertipe collection.

# December 21, 2007 12:48 PM