C # Generics (ทั่วไป)
ทั่วไป (ทั่วไป) ช่วยให้คุณสามารถที่จะชะลอการเตรียมความพร้อมของชนิดข้อมูลของการเรียนหรือการเขียนโปรแกรมวิธีการที่องค์ประกอบของสเปคจนกระทั่งถึงเวลาที่จะใช้งานจริงโปรแกรมในคำอื่น ๆ จะช่วยให้คุณเขียนระดับทั่วไปหรือวิธีการที่สามารถทำงานร่วมกับชนิดของข้อมูลใด ๆ
คุณสามารถเขียนชั้นข้อกำหนดหรือวิธีการโดยการแทนชนิดข้อมูลพารามิเตอร์ เมื่อฟังก์ชั่นที่เรียกว่าผู้สร้างหรือวิธีคอมไพเลอร์พบคลาสที่จะสร้างรหัสที่จะจัดการกับชนิดข้อมูลที่ระบุ ตัวอย่างง่าย ๆ ต่อไปนี้จะช่วยให้คุณเข้าใจแนวคิดนี้:
การใช้ระบบ ใช้ System.Collections.Generic; GenericApplication namespace { เรียนสาธารณะ MyGenericArray <T> { ส่วนตัว T [] อาร์เรย์; MyGenericArray สาธารณะ (ขนาด int) { อาร์เรย์ = ใหม่ t [ขนาด + 1]; } ประชาชน T GetItem (ดัชนี int) { กลับอาร์เรย์ [ดัชนี]; } โมฆะสาธารณะ setItem (ดัชนี int, T คุ้มค่า) { อาร์เรย์ [ดัชนี] = ค่า; } } ทดสอบระดับ { เป็นโมฆะคง main (String args []) { // ประกาศเป็นจำนวนเต็มอาร์เรย์ MyGenericArray <int> intArray = ใหม่ MyGenericArray <int> (5) // การตั้งค่าสำหรับ (int c = 0; C <5; C ++) { intArray.setItem (C, C * 5) } // รับค่า (int c = 0; C <5; C ++) { Console.Write (intArray.getItem (c) + ""); } Console.WriteLine (); // ประกาศอาร์เรย์ตัวอักษร MyGenericArray <ถ่าน> charArray = ใหม่ MyGenericArray <ถ่าน> (5) // การตั้งค่าสำหรับ (int c = 0; C <5; C ++) { charArray.setItem (ค (ถ่าน) (C + 97)); } // รับค่า (int c = 0; C <5; C ++) { Console.Write (charArray.getItem (c) + ""); } Console.WriteLine (); Console.ReadKey (); } } }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
05101520 ABCDE
ทั่วไป (ทั่วไป) คุณสมบัติ
การใช้ยาชื่อสามัญเป็นโปรแกรมที่จะเพิ่มขีดความสามารถทางเทคนิคโดยเฉพาะในด้านต่อไปนี้:
- มันจะช่วยให้คุณสามารถเพิ่มการใช้ซ้ำรหัสชนิดของการป้องกันความปลอดภัยและการปรับปรุงประสิทธิภาพ
- คุณสามารถสร้างคอลเลกชันเรียนทั่วไป ห้องสมุด NET Framework ที่มีระดับชั้นเรียนหลายคอลเลกชันใหม่ทั่วไปใน namespaceSystem.Collections.Genericคุณสามารถใช้เรียนคอลเลกชันเหล่านี้ทั่วไปแทนSystem.Collectionsเรียนคอลเลกชัน
- คุณสามารถสร้างการเชื่อมต่อของคุณเองทั่วไปเรียนทั่วไปวิธีการทั่วไปเหตุการณ์ทั่วไปและผู้ร่วมประชุมทั่วไป
- คุณสามารถ จำกัด ชั้นทั่วไปในการเข้าถึงข้อมูลที่เฉพาะเจาะจงประเภท
- เกี่ยวกับชนิดข้อมูลทั่วไปที่ใช้ในประเภทของข้อมูลที่สามารถรับได้ในเวลาทำงานโดยใช้การสะท้อน
ทั่วไป (ทั่วไป) วิธีการ
ในตัวอย่างข้างต้นเราได้ใช้ระดับทั่วไปเราสามารถประกาศพารามิเตอร์พิมพ์วิธีการทั่วไป โปรแกรมต่อไปนี้แสดงให้เห็นถึงแนวคิดนี้:
การใช้ระบบ ใช้ System.Collections.Generic; GenericMethodAppl namespace { Program รุ่น { เป็นโมฆะคง Swap <T> (Ref T LHS อ้างอิง T RHS) { T อุณหภูมิ; อุณหภูมิ = LHS; LHS = RHS; RHS = อุณหภูมิ; } เป็นโมฆะคง main (String args []) { int A, B; ถ่าน C, D; A = 10; B = 20; C = 'ฉัน'; D = 'V'; // แสดงผลก่อน Console.WriteLine ค่าตลาดหลักทรัพย์ ( "ค่า Int ก่อนที่จะเรียกแลกเปลี่ยน:"); Console.WriteLine ( "A = {0}, B = {1}", A, B); ( "ค่า Char ก่อนที่จะเรียกแลกเปลี่ยน:") Console.WriteLine; Console.WriteLine ( "C = {0}, D = {1}", C, D); // แลกเปลี่ยนโทร Swap <int> (เตะอ้างอิง B); Swap <ถ่าน> (Ref C, D โทษ); // หลังจากการแลกเปลี่ยน Console.WriteLine ค่าการแสดงผล ( "ค่า Int หลังจากเรียกแลกเปลี่ยน:"); Console.WriteLine ( "A = {0}, B = {1}", A, B); ( "ค่า Char หลังจากเรียกแลกเปลี่ยน:") Console.WriteLine; Console.WriteLine ( "C = {0}, D = {1}", C, D); Console.ReadKey (); } } }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
ค่า Int ก่อนที่จะเรียกแลกเปลี่ยน: A = 10 B = 20 ค่าถ่านก่อนที่จะเรียกแลกเปลี่ยน: c = I, D = V ค่า Int หลังจากเรียกแลกเปลี่ยน: A = 20 B = 10 ค่าถ่านหลังจากเรียกแลกเปลี่ยน: c = V, D = ฉัน
ทั่วไป (ทั่วไป) นาย
คุณสามารถกำหนดผ่านพารามิเตอร์ประเภทผู้ร่วมประชุมทั่วไป ตัวอย่างเช่น:
ผู้รับมอบสิทธิ์ T NumberChanger <T> (T N);
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้งานของคณะกรรมการ:
การใช้ระบบ ใช้ System.Collections.Generic; ผู้รับมอบสิทธิ์ T NumberChanger <T> (T N); GenericDelegateAppl namespace { ระดับ TestDelegate { int NUM คงที่ = 10; สาธารณะคง int AddNum (int P) { NUM + = p; กลับ NUM; } สาธารณะคง int MultNum (int Q) { NUM * = Q; กลับ NUM; } int สาธารณะคง getNum () { กลับ NUM; } เป็นโมฆะคง main (String args []) { // สร้างตัวอย่างผู้รับมอบสิทธิ์ NumberChanger <int> NC1 = ใหม่ NumberChanger <int> (AddNum); NumberChanger <int> NC2 = ใหม่ NumberChanger <int> (MultNum); // วิธีการเรียกใช้ NC1 ผู้รับมอบวัตถุ (25); Console.WriteLine ( "ค่าของ Num: {0}" getNum ()); NC2 (5) Console.WriteLine ( "ค่าของ Num: {0}" getNum ()); Console.ReadKey (); } } }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
ค่าของ Num: 35 ค่าของ Num: 175