- คอลเลกชัน (Collections)ใน C #
1.1 อาร์เรย์ (Array)
1.2 รายการ (List)
1.3 Stack และ Queue
1.4 HashSet
1.5 พจนานุกรม (Dictionary) - Generics ใน C #
2.1 คลาสทั่วไป (Generic Classes)
2.2 วิธีการทั่วไป (Generic Methods)
2.3 ข้อจำกัด (Constraints) ใน Generics - การนำไปใช้ในการทำแอพ
ในด้านการทำแอพ โดยเฉพาะอย่างยิ่งเมื่อใช้ภาษาอเนกประสงค์ เช่น C# การทำความเข้าใจคอลเล็กชัน (collections) และ generics เป็นสิ่งสำคัญ คอลเล็กชันใช้เพื่อเก็บกลุ่มของออบเจกต์ในหน่วยความจำ ในขณะที่ทั่วไปนำระดับความสามารถในการใช้ซ้ำและความปลอดภัยของประเภทมาสู่โค้ดของคุณ งานชิ้นนี้มุ่งเน้นไปที่การอธิบายความสำคัญ ฟังก์ชันการทำงาน และแอปพลิเคชันของคอลเลกชัน (collections) และ genericsใน C# สำหรับการทำแอพ
1. คอลเลกชัน (Collections)ใน C #
คอลเลกชันใน C# เป็นส่วนสำคัญของ .NET Framework ซึ่งมีหลายคลาสที่เก็บคอลเลกชันของวัตถุ คลาสเหล่านี้สามารถจัดกลุ่มเป็นรายการ พจนานุกรม คิว สแต็ก และชุด ขึ้นอยู่กับวิธีจัดการข้อมูล
1.1 อาร์เรย์ (Array)
อาร์เรย์เป็นรูปแบบที่ง่ายที่สุดของการรวบรวมและสามารถเก็บองค์ประกอบประเภทเดียวกันได้ในจำนวนที่แน่นอน เป็นตัวเลือกที่เหมาะอย่างยิ่งเมื่อคุณทราบจำนวนองค์ประกอบล่วงหน้า อย่างไรก็ตาม อาร์เรย์มีความยืดหยุ่นน้อยกว่าเมื่อเปรียบเทียบกับคอลเลกชันประเภทอื่นๆ เนื่องจากมีขนาดคงที่และไม่สามารถปรับขนาดแบบไดนามิกได้
int[] numbers = new int[5] {1, 2, 3, 4, 5};
1.2 รายการ (List)
รายการใน C# เป็นชุดคำสั่งของรายการ คล้ายกับอาร์เรย์ แต่มีขนาดไดนามิก เป็นหนึ่งในประเภทที่ใช้บ่อยที่สุดในการทำแอพ เนื่องจากความยืดหยุ่นและจำนวนวิธีที่จัดเตรียมไว้สำหรับการจัดการ
List<int> numbers = new List<int> {1, 2, 3, 4, 5};
1.3 Stack และ Queue
Stacks and Queues มักใช้ในกรณีเฉพาะที่เราต้องการควบคุมลำดับขององค์ประกอบการประมวลผล สแต็คเป็นไปตามหลักการ LIFO (Last In, First Out) ทำให้เหมาะสำหรับสถานการณ์ที่คุณต้องการให้รายการสุดท้ายที่คุณใส่เป็นรายการแรกที่คุณนำออก
Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
stack.Push(3);
int lastIn = stack.Pop(); // lastIn = 3
ในทางกลับกัน คิวเป็นไปตามหลักการ FIFO (เข้าก่อนออกก่อน) ใช้เมื่อคุณต้องการจัดการออบเจกต์ตามลำดับการมาถึงของออบเจกต์ ซึ่งเป็นเรื่องปกติของคิวในโลกแห่งความเป็นจริง
Queue<int> queue = new Queue<int>();
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
int firstIn = queue.Dequeue(); // firstIn = 1
1.4 HashSet
HashSet คือชุดขององค์ประกอบที่ไม่ซ้ำกัน มีประโยชน์เมื่อคุณต้องการกำจัดรายการที่ซ้ำกันและสนใจเฉพาะการมีหรือไม่มีรายการ ไม่ใช่ลำดับของรายการ
HashSet<int> uniqueNumbers = new HashSet<int> {1, 2, 3, 2, 1};
// uniqueNumbers = {1, 2, 3}
1.5 พจนานุกรม (Dictionary)
พจนานุกรม (Dictionary) คือชุดของคู่คีย์-ค่า ซึ่งช่วยให้คุณเข้าถึงค่าได้ด้วยคีย์ที่เกี่ยวข้อง มันคล้ายกับพจนานุกรมจริง ๆ ซึ่งคุณสามารถค้นหาคำจำกัดความ (ค่า) ตามคำ (คีย์)
Dictionary<string, int> ages = new Dictionary<string, int>
{
{"John", 35},
{"Mary", 30},
{"James", 40}
};
int johnAge = ages["John"]; // johnAge = 35
2. Generics ใน C #
Generics เป็นหนึ่งในคุณสมบัติที่ทรงพลังที่สุดของ C# พวกเขาได้รับการแนะนำเพื่อเพิ่มการใช้โค้ดซ้ำ ความปลอดภัยของประเภท และประสิทธิภาพ พูดง่ายๆ ก็คือ คุณสามารถนึกถึง generics ว่าเป็นตัวยึดตำแหน่งชนิดหนึ่ง แทนที่จะระบุชนิดข้อมูลเฉพาะ คุณระบุตัวยึดตำแหน่ง และระบุชนิดจริงที่จะใช้เป็นพารามิเตอร์ที่รันไทม์
การใช้ generics มากที่สุดใน C# อยู่ในคอลเล็กชันทั่วไปตามที่กล่าวไว้ข้างต้น แต่ละคอลเลกชันเหล่านี้ใช้พารามิเตอร์ประเภท (อยู่ในวงเล็บมุม) เพื่อระบุประเภทของรายการที่มีอยู่
List<int> numbers = new List<int>();
อย่างไรก็ตาม generics ไม่ได้จำกัดอยู่แค่คอลเลกชั่นเท่านั้น คุณยังสามารถกำหนดคลาส อินเทอร์เฟซ เมธอด เหตุการณ์ และผู้รับมอบสิทธิ์ทั่วไปของคุณ
2.1 คลาสทั่วไป (Generic Classes)
ในการทำแอพ คุณมักจะสร้างคลาสที่สามารถใช้กับข้อมูลประเภทต่างๆ ด้วย generics คุณสามารถสร้างคลาสดังกล่าวได้โดยไม่ต้องผูกมัดกับประเภทข้อมูลเฉพาะ
public class GenericClass<T>
{
public T Data { get; set; }
}
var intInstance = new GenericClass<int>();
var stringInstance = new GenericClass<string>();
2.2 วิธีการทั่วไป (Generic Methods)
เช่นเดียวกับคลาส คุณสามารถกำหนดเมธอดที่ไม่ขึ้นกับชนิดข้อมูลได้ เมธอดเหล่านี้มีประโยชน์เมื่อเมธอดโลจิกเหมือนกันในข้อมูลหลายประเภท
public T Max<T>(T num1, T num2) where T : IComparable<T>
{
return num1.CompareTo(num2) > 0 ? num1 : num2;
}
2.3 ข้อจำกัด (Constraints) ใน Generics
เมื่อจัดการกับคลาสและเมธอดทั่วไป คุณสามารถใช้ข้อจำกัดเพื่อจำกัดชนิดของประเภทที่โค้ดไคลเอนต์สามารถใช้สำหรับอาร์กิวเมนต์ประเภท มีการระบุข้อจำกัดโดยใช้คีย์เวิร์ด where
public class GenericClass<T> where T : class
{
// ...
}
ในตัวอย่างข้างต้น คลาสทั่วไปสามารถสร้างอินสแตนซ์ได้ด้วยประเภทที่เป็นคลาสเท่านั้น
3. การนำไปใช้ในการทำแอพ
การใช้คอลเลกชัน (collections) และ generics แพร่หลายในการทำแอพ C# มีประโยชน์อย่างยิ่งในการจัดการข้อมูล สร้างส่วนประกอบที่ใช้ซ้ำได้ ปรับปรุงประสิทธิภาพ และรับประกันความปลอดภัยของประเภท นี่คือแอปพลิเคชันเฉพาะบางอย่าง:
- การจัดการข้อมูล (Data Manipulation) : คอลเลกชันถูกใช้อย่างกว้างขวางในการจัดการและจัดการข้อมูล ตัวอย่างเช่น ในแอปมือถือ สามารถใช้รายการหรือพจนานุกรมเพื่อจัดการข้อมูลผู้ใช้ ในขณะที่คิวสามารถใช้เพื่อจัดการงานในบริการเบื้องหลัง
- ส่วนประกอบที่ใช้ซ้ำได้ (Reusable Components) : Generics ช่วยสร้างส่วนประกอบที่ใช้ซ้ำได้ ตัวอย่างเช่น ในแอปเกม สามารถสร้างคลาสทั่วไปเพื่อจัดการอ็อบเจกต์ในเกม โดยไม่คำนึงว่าสิ่งนั้นจะเป็นศัตรู ตัวเพิ่มพลัง หรือตัวละครของผู้เล่น
- ประสิทธิภาพ (Performance) : Generics สามารถนำไปสู่การปรับปรุงประสิทธิภาพโดยการลดความจำเป็นในการแกะกล่องและแกะกล่อง ซึ่งเป็นการดำเนินการทั่วไปในคอลเลกชันที่ไม่ใช่ทั่วไปที่สามารถเพิ่มค่าใช้จ่ายที่สำคัญได้
- ความปลอดภัยประเภท (Type Safety) : ทั้งคอลเลกชัน (collections) และทั่วไปให้ความปลอดภัยประเภท ทำให้แน่ใจว่าไม่มีการใช้วัตถุผิดประเภทโดยไม่ตั้งใจ ช่วยลดข้อผิดพลาดรันไทม์
การทำความเข้าใจคอลเล็กชัน (collections) และ generics ใน C# เป็นสิ่งสำคัญในการทำแอพ พวกเขามีวิธีที่มีประสิทธิภาพและยืดหยุ่นในการจัดกลุ่มและจัดการวัตถุ และช่วยสร้างโค้ดที่ปลอดภัยสำหรับประเภทที่ใช้ซ้ำได้ เมื่อคุณสำรวจและใช้คุณลักษณะเหล่านี้ต่อไป คุณจะพบว่าคุณลักษณะเหล่านี้เป็นเครื่องมือที่ทรงคุณค่าในชุดเครื่องมือการทำแอพ C# ของคุณ