การแปลงโดยนัยและโดยชัดแจ้ง
แปลงระหว่างชนิดข้อมูลที่เข้ากันได้อย่างปลอดภัย
การแปลงโดยนัยและโดยชัดแจ้ง เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
การแปลงระหว่างชนิด
C# สามารถแปลงชนิดตัวเลขหนึ่งไปเป็นอีกชนิดหนึ่งได้ การแปลงบางอย่างเกิดขึ้นโดยอัตโนมัติ (โดยนัย) ส่วนการแปลงบางอย่างต้องระบุ การแปลงชนิดอย่างชัดเจน
using System;
class Program
{
static void Main()
{
int i = 10;
double d = i; // implicit
int back = (int)d; // explicit
Console.WriteLine(d + ", " + back);
}
}การแปลงโดยนัย (การขยายชนิด)
การแปลงโดยนัยจะทำได้เมื่อไม่มีข้อมูลสูญหาย เช่น จาก int เป็น long หรือจาก int เป็น double โดยไม่ต้องระบุการแปลงชนิด
using System;
class Program
{
static void Main()
{
int i = 42;
long l = i; // widening, safe
double d = i; // widening, safe
Console.WriteLine(l + ", " + d);
}
}เหตุใดการขยายชนิดจึงปลอดภัย
ชนิดปลายทางสามารถแทนค่าทุกค่าของชนิดต้นทางได้ ดังนั้นคอมไพเลอร์จึงอนุญาตให้ทำโดยไม่ต้องแจ้งเตือน
using System;
class Program
{
static void Main()
{
byte b = 200;
int i = b; // byte fits in int
Console.WriteLine("byte " + b + " -> int " + i);
}
}การแปลงอย่างชัดเจน (การลดชนิด)
การแปลงอย่างชัดเจน (การแปลงชนิด) จำเป็นเมื่อข้อมูลอาจสูญหาย เช่น จาก double เป็น int โดยเขียนเป็น (int)value
using System;
class Program
{
static void Main()
{
double d = 9.78;
int i = (int)d; // truncates toward zero -> 9
Console.WriteLine(i);
}
}การแปลงชนิดจะตัดทอน ไม่ใช่การปัดเศษ
การแปลงค่าทศนิยมเป็นจำนวนเต็มจะตัดส่วนทศนิยมออก ไม่ได้ปัดเศษ หากต้องการปัดเศษ ให้ใช้ Math.Round ก่อน
using System;
class Program
{
static void Main()
{
double d = 7.99;
Console.WriteLine("Cast: " + (int)d);
Console.WriteLine("Round: " + (int)Math.Round(d));
}
}ค่าล้นเมื่อ ลดชนิด
หากค่าไม่สามารถเก็บในชนิดปลายทางได้ การแปลงชนิดแบบธรรมดาอาจทำให้ค่าเวียนกลับโดยไม่แจ้งเตือน ให้ครอบด้วย checked เพื่อให้เกิดข้อผิดพลาดเมื่อค่าล้นแทน
using System;
class Program
{
static void Main()
{
int big = 300;
byte wrapped = (byte)big; // 300 wraps to 44
Console.WriteLine("Wrapped: " + wrapped);
try
{
byte safe = checked((byte)big);
Console.WriteLine(safe);
}
catch (OverflowException)
{
Console.WriteLine("checked caught overflow");
}
}
}การสูญเสียความแม่นยำ
แม้แต่การแปลงแบบขยายชนิดบางอย่าง เช่น จาก long ขนาดใหญ่มากเป็น float ก็อาจสูญเสียความแม่นยำได้ แม้จะยังเป็นการแปลงโดยนัยก็ตาม
using System;
class Program
{
static void Main()
{
long big = 9007199254740993L;
double approx = big; // implicit, may lose precision
Console.WriteLine("long: " + big);
Console.WriteLine("double: " + approx.ToString("F0"));
}
}การแปลงอักขระและชนิดตัวเลข
char สามารถแปลงโดยนัยเป็นรหัสตัวเลขของอักขระนั้นได้ และคุณสามารถแปลงตัวเลขกลับเป็น char อย่างชัดเจนได้
using System;
class Program
{
static void Main()
{
char c = 'A';
int code = c; // implicit -> 65
char next = (char)(code + 1); // explicit -> B
Console.WriteLine(code + " -> " + next);
}
}การแปลงในนิพจน์
ในการคำนวณที่มีชนิดผสม ชนิดที่เล็กกว่าจะถูกเลื่อนระดับเป็นชนิดที่ใหญ่กว่าโดยอัตโนมัติก่อนดำเนินการ
using System;
class Program
{
static void Main()
{
int a = 7;
double b = 2;
double result = a / b; // a promoted to double -> 3.5
Console.WriteLine(result);
}
}ข้อควรระวังของการหารจำนวนเต็ม
หากตัวถูกดำเนินการทั้งสองเป็นจำนวนเต็ม การหารจะเป็นการหารจำนวนเต็ม ให้แปลงค่าหนึ่งค่าเป็น double ก่อนเพื่อให้ได้ผลลัพธ์ที่มีส่วนทศนิยม
using System;
class Program
{
static void Main()
{
int a = 7, b = 2;
Console.WriteLine("int / int: " + (a / b));
Console.WriteLine("with cast: " + ((double)a / b));
}
}สรุปรวม
ควรใช้การแปลงโดยนัยเมื่อปลอดภัย ใช้การแปลงชนิดอย่างชัดเจนเมื่อลดชนิด และระวังการตัดทอน ค่าล้น และการหารจำนวนเต็ม
using System;
class Program
{
static void Main()
{
int total = 17, count = 5;
double average = (double)total / count; // cast to avoid integer division
int rounded = (int)Math.Round(average);
Console.WriteLine("avg=" + average + ", rounded=" + rounded);
}
}ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับการแปลงชนิด
ทบทวน
การแปลงแบบ โดยนัย (การขยายชนิด) จะเกิดขึ้นโดยอัตโนมัติเมื่อไม่มีข้อมูลสูญหาย (จาก int เป็น long จาก int เป็น double) ส่วนการแปลงแบบ อย่างชัดเจน (การลดชนิด) ต้องใช้การแปลงชนิด เช่น (int)x และอาจทำให้เกิดการตัดทอนหรือค่าล้น ใช้ checked เพื่อตรวจจับค่าล้น และแปลงเป็น double เพื่อหลีกเลี่ยงการหารจำนวนเต็ม
using System;
class Program
{
static void Main()
{
double d = 3.9;
int i = (int)d; // explicit, truncates to 3
long l = i; // implicit widening
Console.WriteLine(i + ", " + l);
}
}เรียนรู้ C# ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 93
- บทเรียน
- 346
คำถามที่พบบ่อย
บทเรียน “การแปลงโดยนัยและโดยชัดแจ้ง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแปลงโดยนัยและโดยชัดแจ้ง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแปลงโดยนัยและโดยชัดแจ้ง”
แปลงระหว่างชนิดข้อมูลที่เข้ากันได้อย่างปลอดภัย คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การแปลงโดยนัยและโดยชัดแจ้ง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม
ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ชนิดค่าเทียบกับชนิดอ้างอิง
- การบรรจุและการนำออกจากกล่อง
- การแปลงโดยนัยและโดยชัดแจ้ง
- คลาส Convert และการแยกวิเคราะห์