C# Academy · บทเรียน

การแปลงโดยนัยและโดยชัดแจ้ง

แปลงระหว่างชนิดข้อมูลที่เข้ากันได้อย่างปลอดภัย

บทเรียน 3 จาก 413 ขั้นตอน

การแปลงโดยนัยและโดยชัดแจ้ง เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. ชนิดค่าเทียบกับชนิดอ้างอิง
  2. การบรรจุและการนำออกจากกล่อง
  3. การแปลงโดยนัยและโดยชัดแจ้ง
  4. คลาส Convert และการแยกวิเคราะห์
← กลับไปที่ C# Academy