การสืบทอด C # และความหลากหลายพร้อมตัวอย่างโปรแกรม
การสืบทอดใน C # คืออะไร?
มรดก เป็นแนวคิดที่สำคัญของ C# การสืบทอดเป็นแนวคิดที่คุณกำหนดคลาสพาเรนต์และคลาสลูก คลาสลูกสืบทอดวิธีการและคุณสมบัติของคลาสพาเรนต์ แต่ในขณะเดียวกัน คลาสลูกก็สามารถปรับเปลี่ยนพฤติกรรมของเมธอดได้หากต้องการ คลาสย่อยยังสามารถกำหนดวิธีการของตนเองได้หากต้องการ
มาทำความเข้าใจเกี่ยวกับการสืบทอด C# กันดีกว่าโดยตัวอย่างโปรแกรม:
ตัวอย่างการสืบทอด C#
ตอนนี้เรามาดูกันว่าเราจะรวมแนวคิดเรื่องการสืบทอดในโค้ดของเราได้อย่างไร
ขั้นตอน 1) ขั้นตอนแรกคือการเปลี่ยนโค้ดสำหรับคลาสการสอนของเรา ในขั้นตอนนี้ เราจะเพิ่มโค้ดด้านล่างลงในไฟล์ Tutorial.cs
โปรดทราบว่าตอนนี้เราจำเป็นต้องเพิ่มตัวแก้ไขการเข้าถึงของ 'protected' ให้กับทั้งฟิลด์ TutorialID และ TutorialName
โปรดจำไว้ว่าเราได้กล่าวถึงตัวแก้ไขการเข้าถึงนี้ในบทช่วยสอนตัวแก้ไขการเข้าถึง ที่นี่คุณสามารถเห็นจุดประสงค์ของการมีสิ่งนี้ เฉพาะเมื่อคุณมีตัวแก้ไขการเข้าถึงนี้ (ป้องกัน) คลาสลูกจะสามารถใช้ฟิลด์ของคลาสพาเรนต์ได้
ขั้นตอน 2) ขั้นตอนที่สองคือการเพิ่มคลาสย่อยใหม่ของเรา ชื่อของคลาสนี้จะเป็น “Guru99Tutorial” ในขั้นตอนนี้ เราจะเพิ่มโค้ดด้านล่างลงในไฟล์ Tutorial.cs ควรวางโค้ดไว้หลังคำจำกัดความของคลาส Tutorial
คำอธิบายรหัส:-
- ขั้นตอนแรกคือการสร้างคลาสย่อย Guru99Tutorial เรายังต้องพูดถึงด้วยว่าคลาสนี้จะเป็นคลาสลูกของคลาส Tutorial ทำได้โดยใช้คีย์เวิร์ด ':'
- ต่อไป เราจะกำหนดวิธีการที่เรียกว่า RenameTutorial มันจะใช้เพื่อเปลี่ยนชื่อฟิลด์ TutorialName เมธอดนี้ยอมรับตัวแปรสตริงซึ่งมีชื่อใหม่ของบทช่วยสอน
- จากนั้นเรากำหนดพารามิเตอร์ pNewName ให้กับฟิลด์ TutorialName
หมายเหตุ: – แม้ว่าเราจะไม่ได้กำหนดฟิลด์ TutorialName ในคลาส “Guru99Tutorial” แต่เรายังคงสามารถเข้าถึงฟิลด์นี้ได้ นี่เป็นเพราะความจริงที่ว่า “Guru99Tutorial” เป็นคลาสย่อยของคลาส Tutorial และเนื่องจากเราสร้างฟิลด์ของคลาส Tutorial ให้มีการป้องกัน คลาสนี้จึงสามารถเข้าถึงได้
ขั้นตอน 3) ขั้นตอนสุดท้ายคือการแก้ไขไฟล์ Program.cs หลักของเรา ในแอปพลิเคชันคอนโซลของเรา เราจะสร้างออบเจ็กต์ของคลาส Guru99Tutorial ด้วยวัตถุนี้ เราจะเรียกวิธีการ RenameTutorial จากนั้นเราจะแสดงฟิลด์ TutorialName โดยใช้วิธี GetTutorial
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { public class Tutorial { protected int TutorialID; protected string TutorialName; public void SetTutorial(int pID,string pName) { TutorialID=pID; TutorialName=pName; } public String GetTutorial() { return TutorialName; } } public class Guru99Tutorial:Tutorial { public void RenameTutorial(String pNewName) { TutorialName=pNewName; } static void Main(string[] args) { Guru99Tutorial pTutor=new Guru99Tutorial(); pTutor.RenameTutorial(".Net by Guru99"); Console.WriteLine(pTutor.GetTutorial()); Console.ReadKey(); } } }
คำอธิบายรหัส:-
- ขั้นตอนแรกคือการสร้างออบเจ็กต์สำหรับคลาส Guru99Tutorial ซึ่งทำได้โดยใช้คำสำคัญ 'ใหม่' โปรดทราบว่าครั้งนี้เราไม่ได้สร้างออบเจ็กต์ของคลาส Tutorial
- เราใช้วิธี RenameTutorial ของคลาส Guru99Tutorial เพื่อเปลี่ยนฟิลด์ TutorialName เราส่งสตริง “.Net by Guru99” ไปยังเมธอด RenameTutorial
- จากนั้นเราจะเรียกใช้เมธอด GetTutorial โปรดทราบว่าแม้ว่าเมธอดนี้จะไม่ได้ถูกกำหนดไว้ในคลาส Guru99Tutorial แต่เราก็ยังสามารถเข้าถึงเมธอดนี้ได้ ผลลัพธ์ของเมธอด GetTutorial จะแสดงบนคอนโซลผ่านเมธอด Console.WriteLine
หากป้อนโค้ดด้านบนถูกต้องแล้วและโปรแกรมทำงานสำเร็จจะแสดงผลลัพธ์ต่อไปนี้
Output:
จากผลลัพธ์ เราจะเห็นได้อย่างชัดเจนว่าฟิลด์ TutorialName ถูกเปลี่ยนชื่อเป็น “.Net by Guru99” สิ่งนี้เกิดขึ้นได้จากวิธีการ RenameTutorial ที่เรียกโดยคลาสลูก
Polymorphism ใน C # คืออะไร?
ความหลากหลาย ใน C# เป็นแนวคิดของ OOPs ที่ชื่อหนึ่งสามารถมีรูปแบบได้หลายแบบ ตัวอย่างเช่น คุณมีสมาร์ทโฟนสำหรับการสื่อสาร โหมดการสื่อสารที่คุณเลือกอาจเป็นอะไรก็ได้ อาจเป็นการโทร ข้อความ ข้อความรูปภาพ อีเมล ฯลฯ ดังนั้นเป้าหมายจึงเหมือนกัน นั่นคือการสื่อสาร แต่แนวทางของทั้งสองแตกต่างกันออกไป นี่เรียกว่า Polymorphism
คุณจะได้รับความเข้าใจที่ดีขึ้นเกี่ยวกับ C# Polymorphism จากตัวอย่างโปรแกรมด้านล่าง:
ตัวอย่างความหลากหลาย C#
ตอนนี้เรามาดูกันว่าเราจะรวมแนวคิดเรื่องความหลากหลายในโค้ดของเราได้อย่างไร
ขั้นตอน 1) ขั้นตอนแรกคือการเปลี่ยนโค้ดสำหรับคลาสการสอนของเรา ในขั้นตอนนี้ เราจะเพิ่มโค้ดด้านล่างลงในไฟล์ Tutorial.cs
คำอธิบายรหัส:-
1 & 2) ขั้นตอนแรกเหมือนกับในตัวอย่างก่อนหน้านี้ เรากำลังรักษาคำจำกัดความของวิธี SetTutorial ไว้เหมือนเดิม
3) วิธีการนี้จะตั้งค่า TutorialID และ TutorialName ตามพารามิเตอร์ pID และ pName
4) นี่คือจุดที่เราทำการเปลี่ยนแปลงชั้นเรียนของเรา โดยที่เราเพิ่มวิธีการใหม่ด้วยชื่อเดียวกันของ SetTutorial เฉพาะครั้งนี้เราส่งผ่านพารามิเตอร์เดียวเท่านั้นซึ่งก็คือ pName ในวิธีนี้ เราเพียงแค่ตั้งค่าฟิลด์ของ TutorialName เป็น pName
ขั้นตอน 2) ขั้นตอนสุดท้ายคือการแก้ไขไฟล์ Program.cs หลักของเรา ในแอปพลิเคชันคอนโซลของเรา เราจะสร้างออบเจ็กต์ของคลาส Guru99Tutorial
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Tutorial { public int TutorialID; public string TutorialName; public void SetTutorial(int pID,string pName) { TutorialID=pID; TutorialName=pName; } public void SetTutorial(string pName) { TutorialName=pName; } public String GetTutorial() { return TutorialName; } static void Main(string[] args) { Tutorial pTutor=new Tutorial(); pTutor.SetTutorial(1,"First Tutorial"); Console.WriteLine(pTutor.GetTutorial()); pTutor.SetTutorial("Second Tutorial"); Console.WriteLine(pTutor.GetTutorial()); Console.ReadKey(); } } }
คำอธิบายรหัส:-
- ในขั้นตอนแรก เราใช้เมธอด SetTutorial ที่มี 2 พารามิเตอร์ โดยที่เราจะส่งทั้ง TutorialID และ TutorialName ไปยังเมธอดนี้
- ในขั้นตอนที่สอง เรากำลังเรียกใช้เมธอด SetTutorial ด้วยพารามิเตอร์เพียงตัวเดียว เราแค่ส่ง TutorialName ไปยังวิธีนี้
หากป้อนรหัสข้างต้นอย่างถูกต้องและรันโปรแกรม ผลลัพธ์ต่อไปนี้จะปรากฏขึ้น หากคุณต้องการดึงรหัสบทช่วยสอนพร้อมกับชื่อบทช่วยสอนด้วย คุณควรทำตามขั้นตอนด้านล่าง
- สร้างวิธีการแยกต่างหากที่เรียกว่า public int GetTutorialID
- ในวิธีการนั้นให้เขียนโค้ดบรรทัด “return TutorialID” สามารถใช้เพื่อส่งคืน TutorialID ไปยังโปรแกรมที่เรียกได้
Output:
จากผลลัพธ์ เราจะเห็นได้อย่างชัดเจนว่าทั้งสองวิธีถูกเรียกสำเร็จแล้ว ด้วยเหตุนี้ สตริง "การฝึกสอนครั้งแรก" และ "การฝึกสอนครั้งที่สอง" จึงถูกส่งไปยังคอนโซล
สรุป
- การสืบทอดคือการที่คลาสลูกสืบทอดฟิลด์และวิธีการของคลาสพาเรนต์ คลาสย่อยยังสามารถกำหนดวิธีการของตนเองได้
- ความแตกต่างใน C# เป็นแนวคิด OOP ที่ชื่อเดียวสามารถมีได้หลายรูปแบบ