การใช้งานการแปลง แบบชัดเจนและ การโอเวอร์โหลดโอเปอเรเตอร์ใน C#

C# อนุญาตให้ใช้การแปลงแบบชัดเจน (explicit cast) ดังนี้:

int n1 = 10;
int n2 = (int)(5.0 * n1);

ในตัวอย่างนี้ n1 ถูกโปรโมตเป็น double การคูณจะถูกดำเนินการ และผลลัพธ์ double จะถูกแปลงเป็น int คุณอาจสงสัยว่าการใช้ 5 * n1 ง่ายกว่าสำหรับทั้งโปรแกรมเมอร์และคอมไพเลอร์ในการอ่าน

การเปลี่ยนแปลงการทำงานของโอเปอเรเตอร์: การโอเวอร์โหลดโอเปอเรเตอร์

การโอเวอร์โหลดโอเปอเรเตอร์เป็นการกำหนดฟังก์ชันใหม่ที่รันทุกครั้งที่คุณใช้โอเปอเรเตอร์ในโปรแกรมเดียวกันที่มีการกำหนดโอเวอร์โหลด

การโอเวอร์โหลดโอเปอเรเตอร์จริงๆ แล้วง่ายกว่าที่คิด หากคุณเขียนโค้ดแบบนี้:

var x = 2 + 2;

คุณคาดหวังว่า x จะเท่ากับ 4 ใช่ไหม? นั่นคือวิธีการทำงาน อย่างไรก็ตามในโลกยุคปัจจุบัน คำตอบเป็นเรื่องของความคิดเห็น! ดังนั้นเรามาสร้างให้การบวกของเราทำงานให้ผู้ใช้ได้มากกว่าที่พวกเขาคาดหวัง

ในการทำเช่นนั้น คุณจำเป็นต้องสร้างคลาสที่กำหนดเองที่โอเปอเรเตอร์ของคุณจะใช้ คลาสนี้จะมีชนิดข้อมูลที่กำหนดเองและเมธอดที่คุณจะใช้สำหรับการโอเวอร์โหลดโอเปอเรเตอร์ โดยสรุป หากคุณเพิ่มตัวเลขปกติ คุณจะได้คำตอบปกติ แต่ถ้าคุณเพิ่มตัวเลขพิเศษที่เรียกว่า AddOne คุณจะได้คำตอบที่เพิ่มขึ้น 1:

public class AddOne
{
    public int x;

    public static AddOne operator +(AddOne a, AddOne b)
    {
        AddOne addOne = new AddOne();
        addOne.x = a.x + b.x + 1;
        return addOne;
    }
}

เมื่อโอเปอเรเตอร์ถูกโอเวอร์โหลดแล้ว (โดยมีแท็กโอเปอเรเตอร์ในรายชื่อ) คุณสามารถใช้มันตามปกติได้:

public class Program
{
    static void Main(string[] args)
    {
        AddOne foo = new AddOne();

        foo.x = 2;
        AddOne bar = new AddOne();
        bar.x = 3;
        // และ 2 + 3 ตอนนี้เท่ากับ 6...
        Console.WriteLine(((foo + bar).x.ToString()));
        Console.Read();
    }
}

ผลลัพธ์จะเป็น 6 ไม่ใช่ 5

การโอเวอร์โหลดโอเปอเรเตอร์ไม่ค่อยมีประโยชน์สำหรับ integers เว้นแต่ว่าคุณต้องการเขียนกฎของคณิตศาสตร์ใหม่ อย่างไรก็ตาม หากคุณต้องการรวมสองเอนทิตีที่ต้องการบวกเข้าด้วยกัน เทคนิคนี้อาจมีประโยชน์ ตัวอย่างเช่น ถ้าคุณมีคลาส Product คุณสามารถกำหนดโอเปอเรเตอร์ + ใหม่สำหรับคลาสนั้นเพื่อบวกราคาได้