บทช่วยสอนเชิงลึกนี้อธิบายทั้งหมดเกี่ยวกับ C# โดยใช้คำสั่งและวิธีการเสมือนจริง คุณจะได้เรียนรู้ความแตกต่างระหว่างวิธีการแบบนามธรรมและแบบเสมือน:
บล็อกการใช้งานช่วยในการจัดการทรัพยากรเป็นหลัก ช่วยให้ระบบสามารถจัดการทรัพยากรได้โดยการระบุขอบเขตของวัตถุและความต้องการทรัพยากร
.Net Framework นำเสนอวิธีต่างๆ ในการจัดการทรัพยากรสำหรับวัตถุโดยใช้ตัวรวบรวมขยะ หมายความว่าคุณไม่จำเป็นต้องจัดสรรและลบวัตถุหน่วยความจำอย่างชัดเจน การดำเนินการทำความสะอาดสำหรับวัตถุที่ไม่มีการจัดการใด ๆ จะได้รับการจัดการโดยใช้ตัวทำลาย
เพื่อช่วยให้โปรแกรมเมอร์บรรลุเป้าหมายนี้ คำสั่งการใช้ C# จะจัดเตรียมเงื่อนไขสำหรับการทำลายวัตถุ
เพื่อให้บรรลุการทำลายวัตถุโดยอัตโนมัติ C# เสนอวิธีกำจัดที่สามารถเรียกได้เมื่อไม่ต้องการวัตถุอีกต่อไป การใช้คำสั่งใน C# กำหนดขอบเขตเงื่อนไขสำหรับการมีอยู่ของวัตถุ เมื่อลำดับการดำเนินการออกจากขอบเขตการใช้งาน .Net framework จะรู้ว่าถึงเวลาที่จะทำลายวัตถุนั้นแล้ว
การใช้ C# Statement
Implement IDisposable Interface For Use
The การใช้คำสั่ง C# ช่วยให้โปรแกรมเมอร์ใช้ทรัพยากรหลายอย่างในคำสั่งเดียว ออบเจกต์ทั้งหมดที่กำหนดไว้ภายในบล็อกโค้ดที่ใช้ควรใช้อินเทอร์เฟซ IDisposable และสิ่งนี้ทำให้เฟรมเวิร์กสามารถเรียกใช้การกำจัดเมธอดสำหรับวัตถุที่ระบุภายในคำสั่งเมื่อออก
ตัวอย่าง
การใช้คำสั่งสามารถรวมกับประเภทที่สามารถใช้ IDisposable เช่น StreamWriter, StreamReader เป็นต้น .
มาดูโปรแกรมง่ายๆ กัน:
public class Program { public static void Main(string[] args) { using (SysObj so = new SysObj()) { Console.WriteLine("Inside using statement"); } Console.WriteLine("Outside of the using statement block"); } } class SysObj : IDisposable { public void Dispose() { Console.WriteLine("Dispose method"); } }
เอาต์พุต
เอาต์พุตของรายการข้างต้น โปรแกรม:
ภายในโดยใช้คำสั่ง
วิธีกำจัด
ภายนอกบล็อกคำสั่งการใช้
คำอธิบาย
ในตัวอย่างข้างต้น เมื่อโปรแกรมทำงาน อันดับแรกอินสแตนซ์ "SysObj" จะถูกจัดสรรในฮีปหน่วยความจำ จากนั้นบล็อกการใช้งานจะเริ่มดำเนินการและพิมพ์ผลลัพธ์ที่เรากำหนดไว้ภายในคอนโซล ถัดไป เมื่อบล็อกคำสั่ง Use สิ้นสุดลง การดำเนินการจะถูกโอนไปยังวิธีกำจัดทันที
จากนั้นโค้ดจะออกจากบล็อกคำสั่งและพิมพ์คำสั่งภายนอกไปยังคอนโซล
C# Virtual วิธีการ
วิธีการเสมือนจริงคืออะไร?
เมธอดเสมือนเป็นเมธอดคลาสที่มีฟังก์ชันการทำงานให้กับโปรแกรมเมอร์เพื่อแทนที่เมธอดในคลาสที่ได้รับซึ่งมีลายเซ็นเดียวกัน เมธอดเสมือนส่วนใหญ่จะใช้เพื่อแสดงความหลากหลายในสภาพแวดล้อม OOPs
เมธอดเสมือนสามารถนำไปใช้ได้ทั้งในคลาสที่ได้รับและคลาสพื้นฐาน ส่วนใหญ่จะใช้เมื่อผู้ใช้ต้องการฟังก์ชันเพิ่มเติมในคลาสที่ได้รับ
เมธอดเสมือนจะถูกสร้างขึ้นในคลาสพื้นฐานก่อน จากนั้นจึงสร้างเมธอดเสมือนถูกแทนที่ในคลาสที่ได้รับ สามารถสร้างเมธอดเสมือนในคลาสพื้นฐานได้โดยใช้คีย์เวิร์ด "virtual" และเมธอดเดียวกันนี้สามารถแทนที่ในคลาสที่ได้รับมาโดยใช้คีย์เวิร์ด "override"
วิธีการเสมือน: ข้อควรจำ
- เมธอดเสมือนในคลาสที่ได้รับจะมีคีย์เวิร์ดเสมือน และวิธีการในคลาสที่ได้รับควรมีคีย์เวิร์ดแทนที่
- หากเมธอดถูกประกาศเป็นเมธอดเสมือนในคลาสพื้นฐาน ดังนั้นคลาสที่ได้รับไม่จำเป็นต้องแทนที่เมธอดนั้นเสมอไป เช่น เป็นทางเลือกที่จะแทนที่เมธอดเสมือนในคลาสที่ได้รับ
- หากเมธอดมีคำจำกัดความเหมือนกันทั้งในคลาสฐานและคลาสที่ได้รับ แสดงว่าไม่ใช่ จำเป็นต้องแทนที่เมธอด จำเป็นต้องใช้การแทนที่ก็ต่อเมื่อทั้งสองมีคำจำกัดความต่างกัน
- วิธีการแทนที่ช่วยให้เราสามารถใช้รูปแบบมากกว่าหนึ่งรูปแบบสำหรับวิธีการเดียวกัน ดังนั้นจึงแสดงความหลากหลายด้วย
- วิธีการทั้งหมดไม่ใช่ -virtual ตามค่าเริ่มต้น
- ตัวปรับแต่งเสมือนไม่สามารถใช้ร่วมกับตัวปรับแต่งส่วนตัว แบบคงที่ หรือนามธรรมได้
การใช้คำหลักเสมือนใน C# คืออะไร?
คีย์เวิร์ดเสมือนใน C# ใช้เพื่อแทนที่สมาชิกคลาสพื้นฐานในคลาสที่ได้รับมาตามความต้องการ
คีย์เวิร์ดเสมือนใช้เพื่อระบุเมธอดเสมือนในคลาสพื้นฐานและ เมธอดที่มีลายเซ็นเดียวกันกับที่ต้องถูกแทนที่ในคลาสที่ได้รับนำหน้าด้วยคีย์เวิร์ดแทนที่
ความแตกต่างระหว่างเมธอดนามธรรมกับเมธอดเสมือน
เมธอดเสมือนประกอบด้วยการใช้งานและอนุญาตให้คลาสที่ได้รับมาแทนที่ ในขณะที่เมธอดนามธรรมไม่มีการใช้งานใด ๆ และบังคับให้ โปรแกรมเมอร์จะเขียนเมธอดแทนที่ในคลาสที่ได้รับมา
ดังนั้น กล่าวง่ายๆ ก็คือ เมธอดนามธรรมไม่มีรหัสใดๆ อยู่ภายใน ในขณะที่เมธอดเสมือนมีการใช้งานของตัวเอง
ความแตกต่างระหว่าง เสมือนและแทนที่ใน C#
คำหลักเสมือนมักจะตามด้วยลายเซ็นของเมธอด คุณสมบัติ ฯลฯ และอนุญาตให้แทนที่ในคลาสที่ได้รับ คำสำคัญแทนที่ใช้ในคลาสที่ได้รับด้วยลายเซ็นเมธอด/คุณสมบัติเดียวกันกับในคลาสพื้นฐานเพื่อให้ได้การแทนที่ในคลาสที่ได้รับ
จำเป็นต้องแทนที่เมธอดเสมือนใน C# หรือไม่
คอมไพเลอร์จะไม่บังคับให้โปรแกรมเมอร์แทนที่เมธอดเสมือน คลาสที่ได้รับไม่จำเป็นต้องแทนที่เมธอดเสมือนเสมอไป
ตัวอย่าง
มาดูตัวอย่างเพื่อให้เข้าใจชัดเจนยิ่งขึ้นเกี่ยวกับเมธอดเสมือน
ในตัวอย่างนี้ เราจะใช้เมธอดที่แตกต่างกันสองเมธอดในคลาสฐาน วิธีแรกคือเมธอดที่ไม่ใช่เวอร์ช่วล และอีกเมธอดเป็นเมธอดเสมือนที่มีคีย์เวิร์ดเสมือน วิธีการทั้งสองนี้จะถูกแทนที่ในคลาสที่ได้รับ
ให้เรามีดู:
โปรแกรม
using System; public class Program { public static void Main(string[] args) { calculate calc = new calculate (); numbers nmbr = calc; calc.addition(); nmbr.addition(); calc.subtraction(); nmbr.subtraction(); } } public class numbers { public void addition(){ Console.WriteLine("This is addition method"); } public virtual void subtraction(){ Console.WriteLine("This is subtraction method"); } } public class calculate : numbers { public void addition(){ Console.WriteLine("This is addition method in the derived class"); } public override void subtraction(){ Console.WriteLine("This is subtraction method override in derived class"); } }
เอาต์พุต
เอาต์พุตของโปรแกรมด้านบนคือ:
นี่คือวิธีการบวกในคลาสที่ได้รับมา
นี่คือวิธีการเพิ่มเติม
นี่คือวิธีการลบที่แทนที่ในคลาสที่ได้รับมา
นี่คือวิธีการลบ แทนที่ในคลาสที่ได้มา
คำอธิบาย
ในตัวอย่างข้างต้น เรามีสองคลาส ได้แก่ Number และ Calculate หมายเลขคลาสฐานมีสองวิธี ได้แก่ การบวกและการลบ โดยที่การบวกเป็นวิธีที่ไม่เสมือนจริง และการลบเป็นวิธีเสมือน ดังนั้น เมื่อเรารันโปรแกรมนี้ วิธีการเสมือนของคลาสพื้นฐาน "การบวก" จะถูกแทนที่ในคลาสที่ได้รับมา การคำนวณ
ในอีกคลาสหนึ่ง "โปรแกรม" เราสร้างจุดเริ่มต้นเพื่อสร้างอินสแตนซ์ของคลาสที่ได้รับการคำนวณ และ จากนั้นเรากำหนดอินสแตนซ์เดียวกันให้กับวัตถุอินสแตนซ์ของคลาสฐาน
เมื่อเราเรียกใช้เมธอดเสมือนและไม่ใช่เสมือนโดยใช้อินสแตนซ์ของคลาส เราจะเห็นว่าเมธอดเสมือนถูกแทนที่โดยใช้ทั้งสองอินสแตนซ์ ในขณะที่เมธอดที่ไม่ใช่เวอร์ชวลถูกแทนที่ในขณะที่เรียกใช้คลาสที่ได้รับเท่านั้น
สรุป
คำสั่งการใช้ใน C# ส่วนใหญ่จะใช้สำหรับการจัดการทรัพยากร คำสั่ง using กำหนดขอบเขตเงื่อนไขสำหรับการมีอยู่ของออบเจ็กต์
เมื่อการดำเนินการย้ายออกจากบล็อกคำสั่ง มันจะบอกให้เฟรมเวิร์กทำลายออบเจกต์ใดๆ ที่สร้างขึ้นภายในบล็อกคำสั่ง รหัสที่กำหนดไว้ภายในคำสั่งควรใช้อินเทอร์เฟซ IDisposable เพื่อให้ .Net framework เรียกวิธีกำจัดสำหรับวัตถุที่กำหนดไว้
วิธีการเสมือนช่วยให้ผู้ใช้สามารถแทนที่วิธีการในคลาสที่ได้รับซึ่งมี ลายเซ็นเดียวกับเมธอดในคลาสพื้นฐาน เมธอดเสมือนสามารถใช้เพื่อให้ได้ความหลากหลายในภาษาโปรแกรมเชิงวัตถุ
เมธอดเสมือนส่วนใหญ่จะใช้เมื่อต้องการฟังก์ชันพิเศษในคลาสที่ได้รับ เมธอดเสมือนไม่สามารถเป็นสแตติกส่วนตัวหรือนามธรรมได้ ถูกกำหนดโดยใช้คีย์เวิร์ดเสมือนในคลาสพื้นฐานและแทนที่คีย์เวิร์ดในคลาสที่ได้รับ