Dynamic (Dinamik) anahtar kelime C# 4.0’da tanıtılan her tip veriyi depolayabilen bir özel tiptir. Ama tip güvenliği olmayan bir yapıdır. Yani, bir değişken veya nesne dynamic
olarak tanımlandığında, bu nesnenin tipi derleme zamanında belirlenmez; tip bilgisi çalışma zamanında çözümlenir. dynamic
türü, .NET Framework’ün dinamik bir dil gibi davranmasını sağlar.
dynamic
türü, C#’ın statik tip güvenliği prensiplerinden sapmamızı sağlar ve bazı durumlarda esnekliğe ihtiyaç duyduğumuzda kullanışlı olabilir. dynamic
tipi genellikle aşağıdaki senaryolarda kullanılır:
- COM Nesneleriyle Etkileşim: COM (Component Object Model) nesneleri gibi COM bileşenleriyle etkileşim sırasında
dynamic
türü kullanılabilir. - JSON veya XML İşlemleri: Dinamik olarak yapılandırılmış JSON veya XML verilerini işlerken
dynamic
türü kullanılabilir. - Reflection ile Çalışma: Reflection işlemleri sırasında
dynamic
türü kullanarak nesnelerin özelliklerine ve yöntemlerine erişebiliriz.
Kullanımı:
1. Main Method içerisine, aşağıdaki kodda gösterildiği gibi dynamic bir değişken bildirmek ve bir değer atamak için ifadeyi ekleyin:
// bir string değer saklama
dynamic name = "Ahmed";
2. Aşağıdaki kodda gösterildiği gibi, dize değerinin uzunluğunu almak için bir ifade ekleyin:
Console.WriteLine(name.GetType());
Derleyici dinamik tipleri object tiplerinde derler. Yani derleme zamanı esnasında tip dönüşümünü gerçekleştirmez, bir dynamic tip değişkeninin gerçek tipi, çalışma zamanında çözülecektir.
Sonuç:
System.String
Dinamik tipler, atanan değere göre çalışma zamanında tipleri değiştirir. Aşağıdaki örnek, bir dinamik değişkenin atanan değere göre tipi nasıl değiştirdiğini gösterir.
static void Main(string[] args)
{
dynamic MyDynamicVar = 100;
Console.WriteLine("Value: {0}, Type: {1}", MyDynamicVar, MyDynamicVar.GetType());
MyDynamicVar = "Hello World!!";
Console.WriteLine("Value: {0}, Type: {1}", MyDynamicVar, MyDynamicVar.GetType());
MyDynamicVar = true;
Console.WriteLine("Value: {0}, Type: {1}", MyDynamicVar, MyDynamicVar.GetType());
MyDynamicVar = DateTime.Now;
Console.WriteLine("Value: {0}, Type: {1}", MyDynamicVar, MyDynamicVar.GetType());
}
Sonuç:
Value: 100, Type: System.Int32
Value: Hello World!!, Type: System.String
Value: True, Type: System.Boolean
Value: 01-01-2014, Type: System.DateTime
Dynamic Tip ile Nesne Oluşturma
Dynamic bir tip ile bir class üzerinden nesne oluşturduğumuz zaman dynamic tip derleme zamanı esnasında o class’ın metotlarını ve özelliklerini tanımlayamaz.
Not: Dynamic türler için Visual Studio IntelliSense’in desteklenmediğini unutmayın.
public class Program
{
static void Main(string[] args)
{
dynamic stud = new Student();
stud.DisplayStudentInfo(5);
//çalışır.
stud.DisplayStudentInfo(1, "Bill");// run-time error, no compile-time error
stud.DisplayStudentInfo("1");// run-time error, no compile-time error
stud.FakeMethod();// run-time error, no compile-time error
}
}
public class Student
{
public void DisplayStudentInfo(int id)
{
Console.WriteLine(id);
}
}
dynamic
tipi, tip güvenliği olmayan bir kod yazma gerekliliği olduğunda veya dinamik olarak tip bilgisinin elde edildiği belirli senaryolarda kullanışlı olabilir. Ancak, gereksiz kullanıldığında kodun okunabilirliğini azaltabilir ve hata ayıklama sürecini karmaşıklaştırabilir. Dolayısıyla, dynamic
tipinin özenle ve sınırlı bir şekilde kullanılması önemlidir. Çoğu durumda, C#’ın statik tip güvenliği, daha güvenli ve bakımı kolay kod yazma konusunda avantaj sağlar.