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
คุณสามารถกำหนดโอเปอเรเตอร์ +
ใหม่สำหรับคลาสนั้นเพื่อบวกราคาได้