ชนิด 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การอนุมานชนิดตัวแปรภายในด้วย var
- กรณีที่ควรหลีกเลี่ยง var
- ชนิด dynamic
- นิพจน์ new ที่อนุมานชนิดจากเป้าหมาย