Dynamic Type (C# 4.0+) เก็บค่าได้ทุกชนิด Type Checking เกิดขึ้นที่ Runtime (ไม่ใช่ Compile-time)
Syntax
dynamic variableName = value;
ตัวอย่าง
using System;
class Program
{
static void Main()
{
dynamic val1 = 100; // int
dynamic val2 = "Hello"; // string
dynamic val3 = 3.14; // double
dynamic val4 = new { Name = "Test" }; // Anonymous type
Console.WriteLine(val1.GetType()); // System.Int32
Console.WriteLine(val2.GetType()); // System.String
// เรียกเมธอด/Property แบบ Dynamic
Console.WriteLine(val2.Length); // 5 - ตรวจสอบที่ Runtime
// val2.UnknownMethod(); // RuntimeBinderException (ไม่ Error ตอน Compile)
}
}
Dynamic vs Object
| คุณสมบัติ | object | dynamic |
|---|---|---|
| Type Checking | Compile-time | Runtime |
| Casting | ต้อง Cast | ไม่ต้อง Cast |
| IntelliSense | มี | ไม่มี |
| Performance | ดีกว่า | ช้ากว่า (DLR) |
| ใช้กับ Anonymous Type | ยาก | ง่าย |
เมื่อไหร่ควรใช้ dynamic
- Interop กับ COM, Python, JavaScript
- JSON/XML Parsing แบบไม่รู้ Schema
- Reflection ที่ซับซ้อน
ข้อควรระวัง
Error ที่ Runtime หาได้ยากกว่า ใช้เฉพาะเมื่อจำเป็นจริง