3 Interfeyslarni aniq amalga oshirish
interface IAction
{
void Move();
}
class BaseAction : IAction
{
void IAction.Move()
{
Console.WriteLine("Move in Base Class");
}
}
| Oldingi maqolada ko'rib chiqilgan interfeyslarni noaniq qo'llash bilan bir qatorda, interfeysning aniq bajarilishi ham mavjud. Aniq amalga oshirilganda, interfeys nomi bilan birga metod yoki xususiyatning nomi ko'rsatiladi, ammo biz umumiy modifikatordan foydalana olmaymiz, ya'ni usullar shaxsiy:
Shuni yodda tutingki, interfeys aniq amalga oshirilsa, uning usullari va xususiyatlari sinf interfeysiga kirmaydi. Shuning uchun, to'g'ridan-to'g'ri sinf ob'ekti orqali, biz ularga kira olmaymiz:
static void Main(string[] args)
{
BaseAction action = new BaseAction();
((IAction)action).Move(); // IAction turiga o'tkazish uchun talab qilinadi
IAction action2 = new BaseAction();
action2.Move();
Console.ReadKey();}
|
Qanday vaziyatda interfeysni aniq amalga oshirish kerak bo'lishi mumkin? Masalan, agar sinf bir nechta interfeyslardan foydalansa, lekin ular bir xil natijaga va bir xil parametrlar to'plamiga ega bo'lsa:
class Person : ISchool, IUniversity
{
public void Study()
{
Console.WriteLine("Учеба в школе или в университете");
}
}
interface ISchool
{
void Study();
}
interface IUniversity
{
void Study();
}
|
Shaxslar sinfi bitta Study () usulini belgilaydi va foydalanilgan ikkala interfeys uchun bitta umumiy bajarishni yaratadi. Biz Shaxs ob'ektini ISchool yoki IUniversity tipidagi ob'ekti deb hisoblaganimizdan qat'i nazar, usulning natijasi bir xil bo'ladi.
Amalga oshirilgan interfeyslarni farqlash uchun siz aniq interfeysni qo'llashingiz kerak:
class Person : ISchool, IUniversity
{
void ISchool.Study()
{
Console.WriteLine("Учеба в школе");
}
void IUniversity.Study()
{
Console.WriteLine("Учеба в университете");
}
}
| Foydalanish:
static void Main(string[] args)
{
Person p = new Person();
((ISchool)p).Study();
((IUniversity)p).Study();
Console.Read();
}
|
Boshqa vaziyat, interfeys tayanch sinfda allaqachon amalga oshirilgan bo'lsa, lekin olingan sinfda interfeysni o'z-o'zidan amalga oshirish kerak:
interface IAction
{
void Move();
}
class BaseAction : IAction
{
public void Move()
{
Console.WriteLine("Move in BaseAction");
}
|
}
class HeroAction : BaseAction, IAction
{
void IAction.Move()
{
Console.WriteLine("Move in HeroAction");
}
}
|
HeroAction action1 = new HeroAction();
action1.Move(); // Move in BaseAction
((IAction)action1).Move(); // Move in HeroAction
IAction action2 = new HeroAction();
action2.Move(); // Move in HeroAction
| BaseAction bazaviy klassi allaqachon IAction interfeysini amalga oshirgan bo'lishiga qaramay, olingan sinf uni o'z uslubida amalga oshiradi. Qo'llash darslari:
Do'stlaringiz bilan baham: |