Implicit กับ Explicit Conversion
1 | float f = 105.5f; |
float f สามารถแปลงเป็น double d ผ่านการ assign ด้วยเครื่องหมาย = แบบอัตโนมัติ การ convert type แบบนี้เรียกว่า implicit conversion
1 | double d = 305.5; |
ในทางตรงกันข้าม เราไม่สามารถแปลง double d เป็น float f ได้โดยตรง ต้องใช้ operator cast โดยระบุ float เป็น parameter เราเรียก convert ที่ต้องระบุ type ปลายทางว่า explicit conversion
User-Defined Conversion
เนื่องจาก float และ double เป็น build-in type เราจึงสามารถใช้คุณบัติ implict และ explict conversion ที่มีอยู่
ในกรณีที่ประกาศ type ใหม่ เราสามารถเขียน operator สำหรับ convert type โดยใช้ keyword implicit และ explicit โดย operator ต้องประกาศเป็น public static เสมอ
Implicit
1 | class MagicNumber { |
จากตัวอย่าง ในคลาส MagicNumber มีการใช้ keyword implicit operator เพื่อ overload operator ชื่อ MagicNumber ซึ่งรับ int ตัวเดียวเป็น parameter สิ่งที่ได้จากการ overload ชื่อคลาสลักษณะนี้ จะทำให้ MagicNumber มีคุณสมบัติ implicit conversion
1 | int i = 3; |
คุณสมบัติที่เพิ่มเข้ามาใหม่ ทำให้ MagicNumber n สามารถ assign ค่าใหม่ที่มี type int ได้โดยตรง
Explicit
1 | public static explicit operator int(MagicNumber value) { |
การเขียน explict convertsion ต่างจาก implict convertsion เล็กน้อย คือ เปลี่ยนจาก keyword implicit เป็น explicit เท่านั้น
1 | MagicNumber n = new MagicNumber { Number = 2 }; |
Links