Mavzu: Umumlashgan delegatlar, interfeyslar. Reja
Download 61.5 Kb.
|
Umumlashgan delegatlar
2. Umumlashgan interfeyslar.
Umumlashgan sinflar va metodlardan tashqari, C# umumlashgan interfeyslardan ham foydalanish mumkin. Bunday interfeyslar umumlashgan sinflarga o'xshash tarzda yaratiladi. Quyida ISeries interfeysi 12 bobdagi misolning o'zgartirilgan ko`rinishi keltirilgan[1,612]. (Eslatib o'tamiz, ISeries butun sonlar ketma-ketni chiqaruvchi sinf uchun interfeys.) Ushbu interfeysi amal bajaruvchi ma'lumotlar tipi parametrlar tipi bilan belgilanadi. // Umumiy interfeysdan foydalanishning ko`rinishi. using System; public interface ISeries T GetNext();// navbatdagi sonni qaytaradi void Reset(); // amallar bajarilayotgan sonli ketma-ketlikning boshlanishiga o`tadi void SetStart(T v); // boshlang'ich qiymatni belgilash } // ISeries interfeysidan amalda foydalanish, class ByTwos T start; T val; // очередного элемента в ряду последовательных значений. //Ushbu delegate ketma-ketlikning navbatdagi elementni qiymatini olish uchun //ishlatiluvchi metodning shaklini belgilaydi. public delegate T IncByTwo(T v); // Ushbu delegatda ByTwos sinfining konstruktoriga o'tkaziladigan metodga //havola beriladi. IncByTwo incr; public ByTwos(IncByTwo incrMeth) { start = default(T); val = default(T); incr = incrMeth; } public T GetNext() { val = incr(val); return val; } public void Reset() { val = start; } public void SetStart(T v) { start = v; val = start; } } class ThreeD { public int х.д, у, z; public ThreeD(int a, int b, int c) { x = a; у = b; z = c; } } class GenlntfDemo { // int tipidagi har bir qiymatni ikkitaga oshiruvchi metod aniqlangan. static int IntPlusTwo(int v) { return v + 2; } // double tipidagi har bir qiymatni ikkitaga oshiruvchi metod aniqlangan. static double DoublePlusTwo(double v) { return v + 2.0; } // ThreeD tipidagi ob`ektning har bir koordinata qiymatni ikkitaga oshiruvchi //metod aniqlangan. static ThreeD ThreeDPlusTwo(ThreeD v) { if (v == null) return new ThreeD(0, 0, 0); else return new ThreeD(v.x + 2, v.у + 2, v.z + 2); } static void Main() { // int tipida ammallar bajarilayotgan ketma-ketlikning qiymatlarini chiqarish //keltirilgan. ByTwos < int > intBT = new ByTwos < int > (IntPlusTwo); for (int i = 0; i < 5; i++) Console.Write(intBT.GetNext() + " "); Console.WriteLine(); // double tipida ammallar bajarilayotgan ketma-ketlikning qiymatlarini chiqarish //keltirilgan. ByTwos < double > dblBT = new ByTwos < double > (DoublePlusTwo); dblBT.SetStartA1.4); for (int i = 0; i < 5; i++) Console.Write(dblBT.GetNext() + " "); Console.WriteLine(); // ThreeD tipida ammallar bajarilayotgan berilgan ob`ektning koordinata //qiymatlarini chiqarish keltirilgan. ByTwos < ThreeD > ThrDBT = new ByTwos < ThreeD > (ThreeDPlusTwo); ThreeD coord; for (int i = 0; i < 5; i++) { coord = ThrDBT.GetNext(); Console.Write(coord.x + "," + coord.у + "," + coord.z + " "); } Console.WriteLine(); } } Ushbu kod quyidagi natijani beradi. 2 4 6 8 10 13.4 15.4 17.4 19.4 21.4 0,0,0 2,2,2 4,4,4 6,6,6 8,8,8 Ushbu misoldagi kodda bir qator qiziqarli joylar mavjud. Avvalo, kodning ISeries interfeysi e'lon qilingan qatorga e'tibor beraylik. public interface ISeries Yuqorida aytib o'tilganidek, umumlashtgan interfeysni e'lon qilish uchun umumlashgan sinfni e'lon qilish bilan bir xil sintaksis ishlatiladi. Endi ByTwos sinfining keyingi e'loniga e'tibor beraylik, u ISeries interfeysini amalga oshiradi. class ByTwos Download 61.5 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling