Interfeysni aniqlash uchun interface kalit so'zi ishlatiladi. Odatda, C # dagi interfeys nomlari I bosh harf bilan boshlanadi, masalan, IComparable, IEnumerable, ammo bu majburiy talab emas, balki ko'proq dasturlash uslubi. Interfeys nimani belgilashi mumkin? Umuman olganda, interfeyslar quyidagi ob'ektlarni belgilashi mumkin: - Xususiyatlari - Indeksatorlar - Statik maydonlar va o’zgarmaslar (C # 8.0 dan beri) Quyida interfeys sintaksisining soddalashtirilgan shakli keltirilgan: interface interfays_nomi { qiymat_turi metod_nomi_1 (parametrlar_ro’yxati); qiymat_turi metod_nomi_2 (parametrlar_ro’yxati); // ... qiymat_turi metod_nomi_N (parametrlar_ro’yxati); } Interfeys metodlarini e'lon qilishda faqat qiymat qaytarish turi va signaturasidan foydalaniladi. Ular mohiyatan abstrakt metodlardir. Yuqorida aytib o'tilganidek, interfeysda hech qanday dastur bo'lishi mumkin emas. Shuning uchun interfeysning barcha metodlari ushbu interfeysni o'z ichiga olgan har bir sinfda amalga oshirilishi kerak. Interfeysning o'zida metodlar bevosita ochiq (public) deb hisoblanadi, shuning uchun ularga kirish huquqini aniq ko'rsatishingiz shart emas. Metodlardan tashqari siz interfeyslarda xususiyatlar, indeksatorlar va hodisalarni ham belgilashingiz mumkin. Interfeyslar ma'lumotlar a'zolarini o'z ichiga olmaydi. Shuningdek, ular konstruktorlar, destruktorlar yoki operatorlarni qayta yuklashni aniqlay olmaydilar. Shuningdek, interfeys a'zolarining hech biri statik deb e'lon qilinishi mumkin emas. Interfeys aniqlangandan so'ng, uni bir yoki bir nechta sinflarda amalga oshirish mumkin. Interfeysni amalga oshirish uchun uning nomini tayanch sinf nomiga o'xshash sinf nomidan keyin ko'rsatish kifoya. Quyida sinfda interfeysni amalga oshirishning umumiy shakli keltirilgan: class sinf_nomi: interfeys1_nomi, interfeys2_nomi { / / sinf nomi } bu Yerda interfeys_nomi - amalga oshirilayotgan interfeysning o'ziga xos nomi. Agar interfeys allaqachon sinfda amalga oshirilgan bo'lsa, unda bu to'liq bajarilishi kerak. Xususan, interfeysni tanlab va faqat qismlarga bo'lib amalga oshirish mumkin EMAS. Bir sinfda bir nechta interfeyslarni amalga oshirish mumkin. Bunday holda, sinfda amalga oshirilgan barcha interfeyslar vergul bilan ajratilgan ro'yxat bilan ko'rsatiladi. Sinf tayanch sinfdan meros olishi va shu bilan bir yoki bir nechta interfeyslarni amalga oshirishi mumkin. Bunday holda, interfeyslarning vergul bilan ajratilgan ro'yxatidan oldin tayanch sinf nomi ko'rsatilishi kerak. Interfeysni amalga oshiradigan usullar ommaviy deb e'lon qilinishi kerak. Haqiqat shundaki, interfeysning o'zida ushbu usullar oshkora ravishda nazarda tutilgan, shuning uchun ularni amalga oshirish ham ommaviy bo'lishi kerak. Bundan tashqari, amalga oshirilgan usulning qaytish turi va imzosi interfeys ta'rifida ko'rsatilgan qaytarish turi va imzosiga to'liq mos kelishi kerak. Misol keltiraylik using System; public interface IArOperation { int Sum(int x, double y); int Otr(); int Prz(); int Del(); } public interface ISqrSqrt { int Sqr(int x); int Sqrt(int x); } class A : IArOperation { Int My_x, My_y; public int x { set { My_x = value; } get { return My_x; } } public int y { set { My_y = value; } get { return My_y; } } public A() { } public A (int x, int y) { this.x = x; this.y = y; } public virtual int Sum (int a, double b) { return x + y; } public int Otr() { return x - y; } public int Prz() { return x * y; } public int Del() { return x / y; } public virtual void rewrite() { Console.WriteLine("O’zggaruvchi x: {0}\n O’zgaruvchi y: {1}",x,y); } } class Aa : A { public int z; public Aa(int z, int x, int y) : base(x, y) { this.z = z; } public override int Sum() { return base.x + base.y + z; } public override void rewrite() { base.rewrite(); Console.WriteLine("O’zgaruvchi z: " + z); } } class Ab : A, ISqrSqrt { public int Sqr(int x) { return x * x; } public int Sqrt(int x) { return (int)Math.Sqrt((double)(x)); } } class Program { static void Main() { A obj1 = new A(x: 10, y: 12); Console.WriteLine("obj1: "); obj1.rewrite(); Console.WriteLine("{0} + {1} = {2}",obj1.x,obj1.y,obj1.Sum()); Console.WriteLine("{0} * {1} = {2}", obj1.x, obj1.y, obj1.Prz()); Aa obj2 = new Aa(z: -3, x: 10, y: 14); Console.WriteLine("\nobj2: "); obj2.rewrite(); Console.WriteLine("{0} + {1} + {3} = {2}", obj2.x, obj2.y, obj2.Sum(), ob j2.z); Console.ReadLine(); } }
Do'stlaringiz bilan baham: |