0Pricing
C# Academy · บทเรียน

ชนิด dynamic

เลื่อนการระบุชนิดข้อมูลไปทำในขณะรันไทม์ด้วย dynamic

ชนิด dynamic เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

dynamic คืออะไร

ชนิด dynamic ข้ามการตรวจสอบชนิดขณะคอมไพล์ การเข้าถึงสมาชิกและการดำเนินการจะถูกกำหนดขณะทำงานแทน

using System;

class Program {
    static void Main() {
        dynamic value = 10;
        Console.WriteLine(value + 5);
    }
}

การกำหนดชนิดอื่นซ้ำ

ตัวแปร dynamic สามารถเก็บค่าชนิดใดก็ได้ และยังเปลี่ยนชนิดได้เมื่อมีการกำหนดค่าใหม่

using System;

class Program {
    static void Main() {
        dynamic x = 1;
        Console.WriteLine(x);
        x = "now a string";
        Console.WriteLine(x);
    }
}

การผูกขณะทำงาน

เมื่อใช้ dynamic คอมไพเลอร์จะเชื่อใจคุณ การค้นหาเมธอดและพร็อพเพอร์ตีจะเกิดขึ้นเมื่อบรรทัดนั้นทำงาน ไม่ใช่เมื่อคอมไพล์

using System;

class Program {
    static void Main() {
        dynamic text = "hello";
        Console.WriteLine(text.ToUpper());
    }
}

ข้อผิดพลาดปรากฏขณะทำงาน

เนื่องจากเลื่อนการตรวจสอบออกไป สมาชิกที่ไม่ถูกต้องจึงทำให้เกิด RuntimeBinderException ขณะทำงาน แทนที่จะทำให้คอมไพล์ไม่ผ่าน

using System;
using Microsoft.CSharp.RuntimeBinder;

class Program {
    static void Main() {
        dynamic n = 5;
        try {
            n.NoSuchMethod();
        } catch (RuntimeBinderException) {
            Console.WriteLine("No such member");
        }
    }
}

dynamic เทียบกับการอนุมานชนิดตัวแปร

var ถูกกำหนดชนิดขณะคอมไพล์ ส่วน dynamic ยังคงยืดหยุ่นขณะทำงาน ทั้งสองดูคล้ายกันแต่มีพฤติกรรมแตกต่างกันมาก

using System;

class Program {
    static void Main() {
        var fixedType = 10;
        dynamic flexible = 10;
        flexible = "changed";
        Console.WriteLine(fixedType + " " + flexible);
    }
}

การคำนวณด้วย dynamic

ตัวดำเนินการกับ dynamic จะถูกกำหนดขณะทำงานตามค่าจริงที่เกี่ยวข้อง

using System;

class Program {
    static void Main() {
        dynamic a = 3;
        dynamic b = 4;
        Console.WriteLine(a * b);
    }
}

ค่าที่ dynamic คืน

เมธอดสามารถคืนค่า dynamic ได้เมื่อชนิดเปลี่ยนแปลงไปตามสถานการณ์จริง แต่ผู้เรียกจะสูญเสียความช่วยเหลือจากคอมไพเลอร์ขณะคอมไพล์

using System;

class Program {
    static dynamic GetValue(bool flag) {
        return flag ? (dynamic)42 : "text";
    }
    static void Main() {
        Console.WriteLine(GetValue(true));
        Console.WriteLine(GetValue(false));
    }
}

กรณีใช้งาน dynamic

dynamic ช่วยจัดการการทำงานร่วมกับ COM ข้อมูลลักษณะคล้าย JSON และการเรียกใช้โค้ดที่โครงสร้างยังไม่ทราบจนกว่าจะถึงขณะทำงาน

using System;

class Program {
    static void Main() {
        dynamic data = 100;
        data += 1;
        Console.WriteLine(data);
    }
}

ต้นทุนด้านประสิทธิภาพ

การผูกขณะทำงานมีค่าใช้จ่ายด้านประสิทธิภาพ สำหรับลูปที่ทำงานซ้ำจำนวนมากหรือโค้ดเรียบง่าย ควรเลือกชนิดแบบคงที่เพื่อความเร็วและความปลอดภัย

using System;

class Program {
    static void Main() {
        int fast = 0;
        for (int i = 0; i < 5; i++) fast += i;
        Console.WriteLine(fast);
    }
}

ไม่มี IntelliSense

เครื่องมือแก้ไขไม่สามารถแนะนำสมาชิกของ dynamic ได้ เนื่องจากยังไม่ทราบชนิดจนกว่าจะถึงขณะทำงาน ทำให้การพัฒนาช้าลง

using System;

class Program {
    static void Main() {
        dynamic s = "Code";
        Console.WriteLine(s.Length);
    }
}

ใช้เท่าที่จำเป็น

เลือกใช้ dynamic เฉพาะเมื่อการกำหนดชนิดแบบคงที่ไม่สามารถสื่อสถานการณ์นั้นได้จริง มิฉะนั้นควรเลือกชนิดรูปธรรม

using System;

class Program {
    static void Main() {
        dynamic flexible = 7;
        Console.WriteLine(flexible.GetType().Name);
    }
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเรื่อง dynamic

สรุปทบทวน

dynamic ปิดการตรวจสอบชนิดขณะคอมไพล์และกำหนดสมาชิกขณะทำงาน ดังนั้นตัวแปร dynamic จึงเปลี่ยนชนิดได้ และการเรียกใช้ที่ไม่ถูกต้องจะทำให้เกิด RuntimeBinderException

ต่างจาก var ซึ่งคงที่ขณะคอมไพล์ dynamic ยืดหยุ่นกว่า แต่มีต้นทุนด้านประสิทธิภาพ ไม่มี IntelliSense และควรใช้อย่างจำกัด

คำถามที่พบบ่อย

บทเรียน “ชนิด dynamic” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ชนิด dynamic” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ชนิด dynamic”

เลื่อนการระบุชนิดข้อมูลไปทำในขณะรันไทม์ด้วย dynamic คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “ชนิด dynamic” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การอนุมานชนิดตัวแปรภายในด้วย var
  2. กรณีที่ควรหลีกเลี่ยง var
  3. ชนิด dynamic
  4. นิพจน์ new ที่อนุมานชนิดจากเป้าหมาย
← กลับไปที่ C# Academy