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