C#’ta Programatik Nesne Oluşturma
Merhaba,
C# programlama dilinde bir sınıftan instance talep ederken “new” operatörünü kullanmaktayız. “new” operatörü, talep edilecek olan nesnenin hangi sınıftan olacağını kesin bilmek ister ve dolayısıyla bu ihtiyacını ilgili sınıfın tarafımızdan belirtilerek giderilmesini istemektedir.
new MyClass();
Yukarıdaki kod bloğunu incelerseniz eğer “new” operatörü “MyClass” isimli sınıfın bir instance’ini talep etmektedir. Ama burada dikkat edilmesi gereken husus “MyClass” sınıfının tarafımızca ilgili operatöre bildiriliyor olmasıdır.
Eğer ki, “new” operatörü kullanmaksızın bir sınıfın instance’ını oluşturmak istiyorsanız sizlere sunacağım iki farklı yöntemi uygulayabilirsiniz.
Nesnesini üretmeye çalışacağımız sınıfımızı aşağıda oluşturalım…
class Example { public string ExampleProperty { get; set; } = "ExampleProperty"; public void Message() { Console.WriteLine("Example Message"); } }
Activator Sınıfı İle Nesne Üretimi
Yukarıdaki “Example” isimli sınıftan “new” operatörü olmaksızın “Activator” sınıfı üzerinden aşağıdaki gibi instance talep edebilmekteyiz.
Example example = Activator.CreateInstance(typeof(Example)) as Example; Console.WriteLine(example.ExampleProperty); example.Message();
Assembly Sınıfı İle Nesne Üretimi
Benzer şekilde Assembly sınıfı aracılığıylada “new” operatörünü kullanmaksızın ilgili sınıfımızdan aşağıdaki gibi nesne üretebilmekteyiz.
Assembly assembly = Assembly.GetExecutingAssembly(); Example example = assembly.CreateInstance($"ActivatorExample.{nameof(Example)}") as Example; Console.WriteLine(example.ExampleProperty); example.Message();
Ayrıca nesne üretmek istediğimiz sınıf farklı bir namespace içerisinde bulunuyorsa aşağıdaki gibi namespace adını belirtmemiz yeterlidir.
namespace ActivatorExample2 { class Example { public string ExampleProperty { get; set; } = "ExampleProperty"; public void Message() { Console.WriteLine("Example Message"); } } }
Assembly assembly = Assembly.GetExecutingAssembly(); Example example = assembly.CreateInstance($"ActivatorExample2.{nameof(Example)}") as Example; Console.WriteLine(example.ExampleProperty); example.Message();
Bu şekilde programatik nesne üretimleri spesifik durumlarda oldukça etkili çözümler getirmekte veyahut Factory Design Pattern vs. gibi tasarım kalıplarında sınıf ismine olan birebir bağlılıktan bizleri soyutlamaktadır.
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…