Hasan Akpürüm
Kıdemli Yazılım Danışmanı
Makele Detayı

C# base class ınızı derived class’a cast etme reflection

21.12.2014 17:16:15

Merhaba Arkadaşlar;

Uzun bir aradansonra makale yazabilmek için fırsatbulabildim.

Bu bölümde sizlere reflection ile base class ınızı derived class’a cast etmeyi anlatmaya çalışacağım.
User adında bir entity class’ımız olsun. Id, FirstName,LastName isimlerinde 3 tane property tanımladık.

UserUI adında userinterface tarafında kullanacağımız yeni bir class ekledi ve base class olarak User Entity nesnemisi tanımladık.

Şimdi uygulamaya geçelim. Bir tane User nesnesi oluşturduk. Ve bu user nesnemi’zi UserUI nesnemize eşitleyelim. User sınıfımızda hatırlarsanız 3 tane propertyler vardı. UserUI sınıfımızında base class ı User olduğu için aynı propertyler ler bu sınıfada geldi. 2 nesneyi birbirine eşitlemeye çalıştığımızda cast hatası aldık aldık normal olarak.

Çünkü 2 sınıf 'da aslında farklı varlık. Birtanesi insan birtanesi hayvan. Ama aynı özelliklere sahip.Peki ya çözümümüz nasıl olmalı ? Ya UserUI sınıfımızın instance'ını alıp tek tek User daki değerleri set edicez ya da reflection kullanarak daha az kod ile işimizi çözücez. Ki burada 15 20 tane property olduğunu düşünecek olursak instance alarak yapmamız bizim için zaman kaybı ve kod karışıklığı.Tabi yinede seçim size kalmış :)

Birtane cast methodu yazıcaz. ObjectExtension adında bir tane static class ekliyoruz. ToCast adında generic method yazıyoruz. TObject o anki nesnemiz T1 ise cast edilecek tiptir.

TObject in property lerini gezerek cast etmek istediğimiz nesnenin propertylerine set edicez.

Artık ToCast isimli extension methodumuzu kullanabiliriz. Tanımlamış olduğumuz user nesnemize user.ToCast<ConvertEdilecekTip>(); diyerek istediğimiz sınıfa cast edebiliriz.

Ve sonuç aşağıdaki gibidir.

Not : Ben bu makalede base class ınızı derived class’a cast etmeyi anlattım ama ToCast methodunu istediğiniz sınıflar içinde kullanabilirsiniz. Base class olmasına gerek yok. Benim bu şekilde göstermemin amacı Mvc de Model olarak eklenen sınıfa base class olarak entity sınıfınızı verirseniz View e değerinizi return ederken yada edit , save işlemleri yaparken nesnenizin instance ını alarak tek tek propertyleri set etmenize gerek yok.

Projeyi İndir

Umarım anlatabilmişimdir. Hepinize bol klavye tıkırtılı günler :)

Yorum yaz

Thanks, your message is sent successfully.