ในบทนี้ คุณจะได้รู้จักและการใช้งานกับ Overloading Operators
ที่เราจะใช้ในการทำการดำเนินการทางคณิตศาสตร์กับข้อมูลอื่นๆ เช่น ออบเจ็ค
แต่ สำหรับข้อมูลแบบอื่นเช่น ต้องการเอาน้ำสองแก้วมารวมกัน ข้อมูลที่มีอาจจะเป็นรัศมีของแก้ว หรืออื่นๆ ถ้าหากแก้วนั้นเป็นเหมือนออบเจ็ค มันจึงทำให้การทำงานเมื่อนำมารวมกันนั้น ไม่ได้เป้นเหมือนตัวเลข แต่เราใช้เครื่องหมาย
นี่เป็นรูปแบบของการทำ Overloading Operators ในภาษา C#
และแน่นอนคุณสามารถใช้เครื่องหมายเหล่านี้ ในการทำ overloading operators ในภาษา C#
ตัวอย่างการใช้งานต่างๆ
Overloading Operators คืออะไร
Overloading Operators คือการเปลี่ยนแปลงวิธีการทำงานของตัวดำเนินการทางคณิตศาสตร์ให้ทำงานตามที่ ต้องการ ยกตัวอย่างเช่น ในการบวกเลขสองตัวนั้น เป็นการนำค่าของพวกมันมารวมกัน ซึ่งมันใช้ได้กับตัวเลข เช่น2 + 3 = 5
แต่ สำหรับข้อมูลแบบอื่นเช่น ต้องการเอาน้ำสองแก้วมารวมกัน ข้อมูลที่มีอาจจะเป็นรัศมีของแก้ว หรืออื่นๆ ถ้าหากแก้วนั้นเป็นเหมือนออบเจ็ค มันจึงทำให้การทำงานเมื่อนำมารวมกันนั้น ไม่ได้เป้นเหมือนตัวเลข แต่เราใช้เครื่องหมาย
+
เช่นเดิมนี่เป็นรูปแบบของการทำ Overloading Operators ในภาษา C#
class MyClass { public static MyClass1 operator + (MyClass2 a, MyClass3 b) { MyClass c = b; return c; } }จากรูปแบบข้างบนนั้นเป็นการทำ Overloading operators สำหรับคลาส
MyClass1
สำหรับเครื่องหมาย + (บวก) โดยสร้างฟังก์ชันภายในคลาสนั้นให้เป็น static และใช้คำสั่ง operator
ตามด้วยเครื่องหมายที่ทำการ Overload และส่งอากิวเมนต์สองตัวสำหรับ operand ทั้งสองการสร้างและการใช้ Overloading Operators
ในตัวอย่างนี้ เราจะขอยกตัวอย่างสำหรับการหาผลรวมน้ำในแก้วน้ำ โดยเราจะสร้างคลาสของแก้สน้ำขึ้นมาusing System; namespace OverloadingOperators { class Program { static void Main(string[] args) { Glass g1 = new Glass(5.2f, 8); Glass g2 = new Glass(3.2f, 10); float totalvolume = g1 + g2; Console.WriteLine("g1 and g2 sumation of volume = " + totalvolume); Console.ReadKey(); } } } class Glass { const float PI = 3.14F; private float radius; private float height; public Glass (float r, float h) { radius = r; height = h; } public static float operator +(Glass a, Glass b) { float totalvolume = a.GetVolume() + b.GetVolume(); return totalvolume; } public float GetVolume() { return (2 * radius * 3.14f) * height; } }ในตัวอย่างเป็นการหาผลรวม ของออบเจ็คที่สร้างจากคลาส
Glass
และมีค่า return เป็น float โดยในคำสั่ง g1 + g2
นั้นเป็นการทำงานจากการ overloading และมเื่อรันโปรแกรมจะได้ผลลัพธ์ดังข้างล่างg1 and g2 sumation of volume = 462.208เพื่อ ให้เข้าใจมากขึ้น การทำ overloading operators นั้นคล้ายกันกับ overloading method แต่สิ่งที่ต่างกันคือในการ return ค่าต้องเลือกสำหรับค่าใดค่าหนึ่งเท่านั้น ตัวอย่างต่อไปแทนที่เราส่งค่าผลรมของปริมาตรของแก้วทั้งสองกลับ เราจะทำการส่งแก้วใบใหม่ที่มีปริมาตรเท่าเดิมแทน
using System; namespace OverloadingOperators { class Program { static void Main(string[] args) { Glass g1 = new Glass(5.2f, 8); Glass g2 = new Glass(3.2f, 10); Glass g3 = g1 + g2; Console.WriteLine("g3 radius = " + g3.radius); Console.WriteLine("g3 height = " + g3.radius); Console.WriteLine("g3 volume = " + g3.GetVolume()); Console.ReadKey(); } } } class Glass { const float PI = 3.14F; public float radius; public float height; public Glass (float r, float h) { radius = r; height = h; } public static Glass operator +(Glass a, Glass b) { float totalvolume = a.GetVolume() + b.GetVolume(); float totalArea = a.GetBaseArea() + b.GetBaseArea(); float newRadius = totalArea / 2 / PI; float newHeight = totalvolume / totalArea; Glass c = new Glass(newRadius, newHeight); return c; } public float GetBaseArea() { return 2 * radius * PI; } public float GetVolume() { return (2 * radius * PI) * height; } }ในตัวอย่าง นั้นเป็นการสร้าง overloading operators สำหรับออบเจ็คจากคลาส
Glass
เช่นเดิม แต่ตอนนี้ค่าที่ส่งกลับจำเป็นออบเจ็คของ Glass เช่นเดิม ที่มีปริมาตรเท่าเดิม และนี่เป็นผลลัพธ์เมื่อรันโปรแกรมg3 radius = 8.4 g3 height = 8.4 g3 volume = 462.208จากผลของโปรแกรมั้นเราได้ทำการเปลี่ยนให้เครื่องหมาย
+
สำหรับออบเจ็คของ Glass นั้น return ออบเจ็คของ Glass อันใหม่ ที่มีปริมาตรเท่าเดิม และมีรัศมีและความสูงใหม่เป็นอย่างที่เห็นและแน่นอนคุณสามารถใช้เครื่องหมายเหล่านี้ ในการทำ overloading operators ในภาษา C#
Operators | Number of operand |
---|---|
+ | 1 or 2 |
- | 1 or 2 |
! | 1 |
~ | 1 |
++ | 1 |
-- | 1 |
* | 2 |
/ | 2 |
% | 2 |
== | 2 |
!= | 2 |
< | 2 |
> | 2 |
<= | 2 |
>= | 2 |
public static SomeObjectA operator - (SomeObjectB a, SomeObjectC b) { // do something return ...; // SomeObjectA } public static bool operator == (SomeObjectB a, SomeObjectC b) { // do something return ...; // SomeObjectA } public static SomeObjectA operator ++ (SomeObjectB a) { // do something return ...; // SomeObjectA }ในบทนี้คุณได้รู้จักและได้รู้การสร้างและการใช้งาน Overloading operators เพื่อให้การทำงานเป็นไปตามที่ต้องการได้
ไม่มีความคิดเห็น:
แสดงความคิดเห็น