Var VS Dynamic in type C#
พรรณรมน เอกรัตนเวศน์ 650710087
เปรียบเทียบระหว่าง Variable กับ Dynamic ว่ามีความแตกต่างกันแบบไหนและใช้งานต่างกันอย่างไร โดยVar เป็นฟีเจอร์ที่ถูกเพิ่มเข้ามาใน V3.0 และ Dynamic ใน C# เป็นฟีเจอร์ที่ถูกเพิ่มเข้ามาใน V4.0

Var(Variable)คืออะไร?
variable (ตัวแปร) คือพื้นที่ในหน่วยความจำที่ถูกกำหนดชื่อและประเภทข้อมูล ซึ่งใช้สำหรับเก็บข้อมูลที่จะนำไปใช้งานในโปรแกรม ตัวแปรใน C# จะต้องมีการประกาศชนิดข้อมูล (data type) ก่อนที่จะใช้งาน เช่น int(จำนวนเต็ม) , long (จำนวนเต็ม) , float(ทศนิยม6-7หลัก) , double(ทศนิยม15หลัก) , bool {จริง (true) หรือ เท็จ (false)} , char(อักษร1ตัว) , string(อักษร2ตัวขึ้นไป)
ตัวอย่างโค้ตการใช้งาน:
int age = 25; // ตัวแปรชนิด int ที่ชื่อว่า age และมีค่าเริ่มต้นเป็น 25
string name = "John"; // ตัวแปรชนิด string ที่ชื่อว่า name และมีค่าเริ่มต้นเป็น "John"
double price = 99.99; // ตัวแปรชนิด double ที่ชื่อว่า price และมีค่าเริ่มต้นเป็น 99.99
ชนิดข้อมูล (Data Type): ต้องกำหนดชนิดข้อมูลเมื่อประกาศตัวแปร เช่น int, string, float, bool เป็นต้น
Dynamicคืออะไร?
เป็นประเภทข้อมูล (data type) ที่ถูกเพิ่มเข้ามาในเวอร์ชัน 4.0 ซึ่งใช้ในการประกาศตัวแปรที่ชนิดของข้อมูลจะถูกตรวจสอบใน runtime แทนที่จะเป็น compile-time
โดยทั่วไปแล้ว เมื่อใช้ dynamic จะไม่จำเป็นต้องบอกชนิดของตัวแปรในขณะที่เขียนโปรแกรม แต่ตัวแปรนี้จะสามารถเปลี่ยนชนิดของข้อมูลได้ในขณะที่รันโปรแกรม ซึ่งจะเป็นประโยชน์ในกรณีที่เราไม่สามารถทราบชนิดของข้อมูลล่วงหน้า
ตัวอย่างโค้ตการใช้งาน:
dynamic myVar = 10;
Console.WriteLine(myVar); // Output: 10
myVar = "Hello";
Console.WriteLine(myVar); // Output: Hello
myVar = DateTime.Now;
Console.WriteLine(myVar); // Output: 10/04/2024 09:00:00 AM (ขึ้นกับวันที่และเวลา)
เราเห็นได้ว่า myVar
สามารถเก็บค่าของตัวเลข, สตริง, หรือแม้แต่วันที่และเวลา โดยไม่ต้องประกาศชนิดข้อมูลล่วงหน้า ซึ่งเป็นประโยชน์ในบางกรณี เช่น การทำงานกับข้อมูลที่มาจากภายนอกที่ไม่แน่นอน
สรุปความแตกต่างของVarและDynamic
ใช้ var เมื่อรู้ชนิดข้อมูลล่วงหน้าและต้องการความปลอดภัยในเรื่องชนิดข้อมูล
ใช้ dynamic เมื่อต้องการยืดหยุ่นในการเปลี่ยนชนิดข้อมูลระหว่างรันไทม์
เปรียบเทียบกับภาษาC
ในภาษา C (ซึ่งเป็นภาษาที่ไม่มี var
หรือ dynamic แต่C#
มี) การกำหนดชนิดข้อมูลต้องทำโดยตรงและชัดเจนในเวลาคอมไพล์ ไม่มีการเปลี่ยนแปลงชนิดข้อมูลของตัวแปรในระหว่างรันไทม์เหมือนกับการใช้ dynamic
ใน C# ซึ่งหมายความว่าตัวแปรใน C จะมีชนิดที่คงที่ตลอดเวลา
// กำหนดชนิดข้อมูลโดยตรงเป็น int
int number = 10;
printf("Number (int): %d\n", number);
// ไม่สามารถเปลี่ยนชนิดข้อมูลในภายหลังได้
// number = "text"; // จะเกิดข้อผิดพลาดในเวลาคอมไพล์
return 0;
ใน ภาษาC ตัวแปรจะมีชนิดข้อมูลที่แน่นอนและไม่สามารถเปลี่ยนได้ในระหว่างโปรแกรม

เปรียบเทียบกับภาษาJava
ใน Java ไม่มีการรองรับ dynamic
หรือ var
โดยตรง (เวอร์ชันเก่า) แต่ตั้งแต่ Java 10 เป็นต้นไปมีการใช้ var
ซึ่งชนิดของตัวแปรจะถูกกำหนดในเวลาคอมไพล์คล้ายกับ var
ใน C#
// var (ตั้งแต่ Java 10) - ชนิดข้อมูลถูกกำหนดในเวลาคอมไพล์
var number = 10; // number เป็น int
System.out.println("Number (var): " + number);
// แต่ไม่สามารถเปลี่ยนชนิดข้อมูลได้
หากลองรันโดย number = "Hello World"; // จะเกิดข้อผิดพลาดที่คอมไพล์ทันที

เปรียบเทียบกับภาษาPython
ใน Python ตัวแปรทั้งหมดเป็นdynamic ไม่มีการกำหนดชนิดข้อมูลที่แน่นอน ชนิดของตัวแปรสามารถเปลี่ยนแปลงได้ในระหว่างรันไทม์
# ตัวแปรสามารถเปลี่ยนชนิดได้โดยอัตโนมัติ
number = 10
print("Number (int):", number)
# เปลี่ยนตัวแปรเป็นสตริงได้
number = "GeeksforGeeks"
print("Number (string):", number)
Python ทุกตัวแปรเป็นไดนามิกตามธรรมชาติ คล้ายกับ dynamic
ใน C# โดยไม่มีต้องการระบุชนิดข้อมูลใดๆ

คลิปนำเสนอ
Presentation (slides)
แหล่งที่มาอ้างอิง
เปรียบเทียบความแตกต่างของvar and dynamic in C# :
ankita_saini.30/05/2024.Difference between var and dynamic in C#.
ข้อมูลเกี่ยวกับVariable:
ข้อมูลเกี่ยวกับDynamicคือ:
ข้อมูลเพิ่มเติม:
เปรียบเทียบความแตกต่างกับภาษาC:
MarcusCode.27/06/2015.ตัวแปรและประเภทข้อมูล.
เปรียบเทียบความแตกต่างกับภาษาJava:
MarcusCode.15/08/2016.ตัวแปรและประเภทข้อมูล.
เปรียบเทียบความแตกต่างกับภาษาPython:
MarcusCode.15/08/2016.ตัวแปรและประเภทข้อมูล.
Last updated