Cloning Object Using Reflection

05Dec12

Artikel Sebelumnya kita sudah apa itu reflection dan biasanya digunakan untuk apa. Kali ini, aku ingin posting tentang salah satu kegunaan dari reflection, yaitu kloning sebuah object. Hari aku membuat sebuah static method untuk melakukan proses kloning sebuah object secara generik. Latar belakang kenapa bisa jadi buat mehod ini, karena di kantor ada sebuah object model yang memiliki properti yang banyak yang akan disimpan ke database melalui entity framework. Kalau memindahkan nilai setiap properti satu per satu, bosan dan melelahkan. Jadi aku buat deh sebuah method untuk kloning sebuah object tersebut. Yang dikloning hanya value dari setiap properti object tersebut.
Jika kita membuat obj1 = obj2, maka semua atribut akan terkloning,  maka akan terjadi error jika ingin di-insert ke table . Bahwa primary key sudah ada. Oleh karena itu, saya buat method ini.
Semoga bermanfaat..

Berikut adalah code program yang menggunakan bahasa C#.

  • Object Model yang ingin di clone
  •  public class TestModel
     {
         public int Id { set; get; }
         public string Name { set; get; }
         public DateTime Date { set; get; }
     }
    
  • Class yang akan melakukan kloning
  • public class CloneObject<T>
     {
    
    /*
     filter property adalah property yang tidak ingin diclone.
     kalau cuma satu tulis nama popertynya,
     kalau lebih dari satu, tulis pemisahnya dengan koma.
     Contoh : Id,Name</pre>
     */
     public static T clone<S>(T obj,string filterProperty = null) where S: T, new()
     {
          Type typeObj = obj.GetType();
          S model = new S();
          Type objClone = model.GetType();
          bool state = false;
          string[] filters = filterProperty.Split(',');
          foreach (var property in typeObj.GetProperties())
          {
             foreach (string filter in filters)
             {
                if (property.Name.Equals(filter))
                {
                   state = true;
                   break;
                }
             }
           if (!state)
               objClone.GetProperty(property.Name).SetValue(model,
               property.GetValue(obj,null), null);
    
              state = false;
           }
          return model;
        }
     }
    
  • Main Class
  • class Program
     {
          static void Main(string[] args)
          {
              TestModel tm = new TestModel();
              tm.Id = 12;
              tm.Name = "Alvian";
              tm.Date = DateTime.Now;
    
              TestModel tm2 = CloneObject<TestModel>.clone<TestModel>(tm,"Id,Name");
              Console.WriteLine(tm2.Id.ToString());
              Console.WriteLine(tm2.Name);
              Console.WriteLine(tm2.Date);
              Console.ReadKey();
           }
     }
    

Solutiion-nya dapat diambil disini : Reflection.rar

Advertisements


No Responses Yet to “Cloning Object Using Reflection”

  1. Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: