Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

Dynamic Binding ใน C# คืออะไร

Dynamic Binding (Late Binding) คือการตัดสินใจเรียก Member (Method/Property) ที่ **Runtime** โดยใช้คีย์เวิร์ด dynamic (C# 4.0+)

ตัวอย่าง: หลีกเลี่ยง Anonymous Type Restriction

using System;

class Program
{
    // Anonymous Type ไม่มีชื่อ Type ที่เรียกใช้ได้นอก Method
    // แต่ dynamic ช่วยให้ Return ได้
    public dynamic GetAnonymousType()
    {
        return new 
        { 
            StudentName = "Jack", 
            Subject = "Maths" 
        };
    }
    
    static void Main()
    {
        var p = new Program();
        dynamic student = p.GetAnonymousType();
        
        // เข้าถึง Property ได้เลย ไม่ต้อง Cast
        Console.WriteLine("Name: " + student.StudentName);
        Console.WriteLine("Subject: " + student.Subject);
        
        // student.UnknownProperty; // RuntimeBinderException (ไม่ Error ตอน Compile)
    }
}

Dynamic Binding vs Reflection

คุณสมบัติdynamicReflection
SyntaxSimple (obj.Method())Complex (type.GetMethod().Invoke())
Performanceดีกว่า (DLR Caching)ช้ากว่า
Readabilityสูงต่ำ
IntelliSenseไม่มีไม่มี

ใช้ dynamic เมื่อไหร่

  • Interop: COM, IronPython, JavaScript
  • JSON/XML Dynamic Parsing
  • Anonymous Types ข้าม Method Boundary
  • Plugin/Scripting Systems

⚠️ ข้อควรระวัง

  • Error หาที่ Runtime (ไม่มี Compile-time Safety)
  • Performance Overhead (DLR)
  • ไม่มี IntelliSense/Refactoring Support
  • ใช้เฉพาะเมื่อจำเป็นจริง - ปกติใช้ Static Typing

ExpandoObject (Dynamic Object สร้างเอง)

using System.Dynamic;

dynamic obj = new ExpandoObject();
obj.Name = "John";
obj.Age = 30;
obj.SayHello = new Action(() => Console.WriteLine("Hi " + obj.Name));

obj.SayHello(); // Hi John