Интерфейс әдістері



1. Кіріспе ... ... ... ... ... ...3
2. Интерфейстер ... ... ... 4
3. Түрі өзгертілген интерфейстер ... ... ...8
4. Жалпылама интерфейстер ... ... ... ... ... ... .8
5. Интерфейстің айқын қолданылуы ... ... ... 10
6. Компараторды пайдалану ... ... ... ..17
7. Қорытынды ... ... ... ... ... ... ... ... ... 22
8. Пайдаланылған әдебиеттер
Бір интерфейс басқа интерфейстін мұрагері бола алады. Интерфейстердің мұрагерлік синтаксисі класстағыдай болады. Класста интерфейс орнатылғанда, келесіде оның барлық мүшелері интерфейс мұрасының тізбегінде анықталуы керек.
Осылайша интерфейстер мұрагер бола алады. Класстағы мұрагерлік тәрізді, интерфейс мұрасында қандай да бір кеңейтілім болса, онда ол өзінің мұраларына да бұл кеңейтілім орнатылады. Әрине, класстарға қарағанда, туынды интерфейстер кеңейтілімді қабылдай алмайды. Оның орнына олар өз облысын кеңейтіп, қосымшаларды енгізеді.
Интерфейстің мұрагерлігін қолдану, тек қандай да бір интерфейсті кеңейтіп, кодын бұзбау үшін қолдану пайдалы болуы мүмкін.
1. https://metanit.com
2. https://professorweb.ru
3. https://msdn.microsoft.com

Мазмұны
1. Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...3
2. Интерфейстер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...4
3. Түрі өзгертілген интерфейстер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 8
4. Жалпылама интерфейстер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...8
5. Интерфейстің айқын қолданылуы ... ... ... ... ... ... . ... ... ... ... ... ... ... ..10
6. Компараторды пайдалану ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... 17
7. Қорытынды ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...22
8. Пайдаланылған әдебиеттер ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... ... ..23

Кіріспе
Бір интерфейс басқа интерфейстін мұрагері бола алады. Интерфейстердің мұрагерлік синтаксисі класстағыдай болады. Класста интерфейс орнатылғанда, келесіде оның барлық мүшелері интерфейс мұрасының тізбегінде анықталуы керек.
Осылайша интерфейстер мұрагер бола алады. Класстағы мұрагерлік тәрізді, интерфейс мұрасында қандай да бір кеңейтілім болса, онда ол өзінің мұраларына да бұл кеңейтілім орнатылады. Әрине, класстарға қарағанда, туынды интерфейстер кеңейтілімді қабылдай алмайды. Оның орнына олар өз облысын кеңейтіп, қосымшаларды енгізеді.
Интерфейстің мұрагерлігін қолдану, тек қандай да бір интерфейсті кеңейтіп, кодын бұзбау үшін қолдану пайдалы болуы мүмкін.

Интерфейстер
Мұрагерлікті пайдалана отырып біз мұрагерлік - класстардың базалық класстын жалпы функционалын толықтырыуға немесе анықтауға болады. Алайда, біз тек бір классты тікелей мұрагерлік ете аламыз, ал С++ мұрагерліктін бірнешеуін қосуға болады.
C#-та мұндай проблеманы шешуде интерфейстер көмектеседі. Олар ОББ - да үлкен рөльді ойнайды.Интерфейстер нақты іс әрекеті жоқ функционалды анықтай алады. Содан кейін бұл функционал классты құрастырып, интефейстің деректерін қолданады.
Интерфейсті анықтау үшін interface кілттік сөз қолданылады. C#-тың ережелері бойынша интерфейс аттары бас әріптен басталады. Мыслы: IComparable, IEnumerable, бірақ бұл міндетті талап емес, ол бағдарламалаудың стилі сияқты. Интерфейстер класстар сияқты қасиеттерді, әдістерді, оқиғаларды қолданады, бірақ нақты істін асырылуы болмауы мүмкін.
Келесі Iaccount интерфейсін анықтайық. Ол әдіс пен ерекшелікті клиентті санау үшін қолданады. Интерфейсті қосу үшін проект үстіне тышқанның оң батырмасын басып менюде Add- New Item таңдап, Interface компонентін таңдау керек.

Келесі Iaccount интерфейстің кодын өзгертейік:
interface IAccount
{
Текущая сумма на счету
int CurrentSum { get; }
Положить деньги на счет
void Put(int sum);
Взять со счета
void Withdraw(int sum);
Процент начислений
int Percentage { get; }
}
Интерфейстерде әдіс пен ерекшелік істін жүзеге асырылуы жоқ, сондықтан ол абстрактілі әдіспен және абстрактілі класпен ұқсас болады. Осы интерфейстін мақсаты: ол екі шотында ақша ағымдағы сомасы қасиеттері мен депозиттер бойынша пайыздық ставкаларды айқындайды, және есеп-шотына ақша қосу үшін мен ақша алуға екі әдістер орындалады.
Интерфестін тағы бір ерекшелігі: барлық оның мүшелері - әдістер және қасиеттері рұқсат модификаторлары болмайды, бірақ стандарт бойынша public модификаторы болады. Өйткені интерфейстің мақсаты функционалды, класстармен байланыстыру. Сондықтан барлық функционалдар ашық болу керек.
Интерфейсті қолдану класстарға ұқсас:
class Client : IAccount
{
реализация методов и свойств интерфейса
}

Енді Client классында интерфейсті орнатайық, өйткені клиентте шот бар:
class Client : IAccount
{
int _sum; Переменная для хранения суммы
int _percentage; Переменная для хранения процента
public string Name { get; set; }
public Client(string name, int sum, int percentage)
{
Name = name;
_sum = sum;
_percentage = percentage;
}
public int CurrentSum
{
get { return _sum; }
}
public void Put(int sum)
{
_sum += sum;
}
public void Withdraw(int sum)
{
if (sum = _sum)
{
_sum -= sum;
}
}

public int Percentage
{
get { return _percentage; }
}
public void Display()
{
Console.WriteLine("Клиент " + Name + " имеет счет на сумму " + _sum);
}
}
Абстрактілі класстын абстрактілі әдістері тәріздес Client классы интерфейстің барлық әдістерін орындайды. Бұл жағдайда, интерфейстің барлық әдістері мен қасиеттері public болғандықтан, бұл әдіс пен қасиетті класста орныдағанда public модификаторын қолдану керек. Сондықтан егер класс әдісі protected модификаторын қолданса, онда интерфейске бұл модификатор жарамайды.
Бағдарламада класстың мысалы:
Client client = new Client("Tom", 200, 10);
client.Put(30);
Console.WriteLine(client.CurrentSum ); 230
client.Withdraw(100);
Console.WriteLine(client.CurrentSum ); 130
Интерфейстер класс тәрізді мұрагерлікті қолдана алады:
interface IDepositAccount : IAccount
{
void GetIncome(); начисление процентов
}
Бұл интерфейсті қолданғанда Client классы IDepositAccount интерфейстің әдісі мен қасиеті тәрізді орындалу керек. Себебі әдіс пен қасиет IAccount интерфейстің бөлігі.
Түрі өзгертілген интерфейстер
Түрлердің өзгертулері туралы айтылған бәрі интефейстерге де тән. Өйткені класс Client, IАccount интерфейсті орындауын қосады, онда IAccount типтегі айнымалы Client типтегі объектіге сілтемені сақтай алады.
IAccount client1 = new Client("Том", 200, 10);
client1.Put(200);
Console.WriteLine(client1.CurrentSu m); 400
Интерфейс не имеет метода Display, необходимо явное приведение
((Client)client1).Display();
Егер біз Client класстың әдістере байланысқымыз келсе, ал олар IAccount интерфесте анықталмаған болса, онда бізге оларды түрлерін өзгертуге тура келеді: ((Client)client1).Display();
Жалпылама интерфестер
Класстар тәрізді интерфейстер жалпылама болуы мүмкін:
class ClientT : IAccountT
{
T sum=default(T);
public void SetSum(T _sum)
{
this.sum = _sum;
}
public void Display()
{
Console.WriteLine(sum);
}
}
IAccount интерфейсі Т типімен типтелген, ол тип интерфейс орындалуы қосылғанда Client классында қолданылады. Негізінен қосындының айнмалысы Т сияқты анықталған, ол арқылы қосында айнымалысы санның әртүрлі типтерін қоса алады.
Екі орындалуды қарастырайық: біріншінің параметір типі - int, ал екіншісі double типін пайдаланады:
IAccountint intClient = new Clientint();
intClient.SetSum(300);
intClient.Display();

IAccountdouble doubleClient = new Clientdouble();
doubleClient.SetSum(500.09);
doubleClient.Display();

Интерфейстің айқын қолданылуы
Кейбір жағдайларда класс бірнеше интерфейстерді қолдануы мүмкін, бірақ олардың барлығы бір әдісті, бір жауапты қайтарады және бірдей параметр жиынды қолданады.
Мысалы:
class Person : ISchool, IUniversity
{
public void Study()
{
Console.WriteLine("Учеба в школе или в университете");
}
}

interface ISchool
{
void Study();
}

interface IUniversity
{
void Study();
}
Person классы, Study() әдісті анықтайды. Екі қолданылған интерфейс үшін, бір ортақ орындалуды құрайды. Person объектіні ISchool немесе IUniversity типтегі объект ретінде қарастырмасада, әдістін мәні бір болады.

Алайда, орындалатын интерфейсті кейде ажыратуға тиіс. Бұл жағдайда интерфейсті қолдану қажет:
class Person : ISchool, IUniversity
{
void ISchool.Study()
{
Console.WriteLine("Учеба в школе");
}
void IUniversity.Study()
{
Console.WriteLine("Учеба в университете");
}
}
Айқын қолдану кезінде интерфейс пен әдіс аттары көрсетілуі тиіс, бұл жағдайда біз public модификатроды қолдана алмаймыз, ол дегеніміз әдістеріміз жабық болады. Бұл жағдайда Study әдісті қолданғанда, Person объектісін қажет түрге түрлендіру қажет:
static void Main(string[] args)
{
Person p = new Person();

((ISchool)p).Study();
((IUniversity)p).Study();

Console.Read();
}

Класстар сілтемелік түр болғандықтан, оларда кейбір шектеулер болады. Атап айтқанда:
class Program
{
static void Main(string[] args)
{
Person p1 = new Person { Name="Tom", Age = 23 };
Person p2 = p1;
p2.Name = "Alice";
Console.WriteLine(p1.Name); Alice

Console.Read();
}
}

class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Бұл жағдайда р1 және р2 объектілері жадыдағы бір объектіге сілтенеді. Сондықтан р2 айнымалының өзгеруі р1-ге де әсер етеді.
Р2 айнымалымыз жаңа объектіге, бірақ р1 мәніне тең болып, сілтену үшін біз оны клондаймыз. Ол үшін интерфейс ICloneable қолданады:
public interface ICloneable
{
object Clone();
}
Person классындағы интерфейстін орындалуы келесідегідей болуы мүмкін:
class Person : Icloneable

{
public string Name { get; set; }
public int Age { get; set; }
public object Clone()
{
return new Person { Name = this.Name, Age = this.Age };
}
}
Қолданылуы:
class Program
{
static void Main(string[] args)
{
Person p1 = new Person { Name="Tom", Age = 23 };
Person p2 = (Person)p1.Clone();
p2.Name = "Alice";
Console.WriteLine(p1.Name); Tom

Console.Read();
}
}
Енді бәрі жақсы көшіріледі де, р2-нің өзгерістері р1-ге әсер етпейді.
Көшіру кодын қысқарту үшін, арнайы әдісті қолданайық MemberwiseClone(), ол объектінің көшірмесін қайтарады:
class Person : ICloneable
{
public string Name { get; set; }
public int Age { get; set; }
public object Clone()
{
return this.MemberwiseClone();
}
}
Бұл әдіс беттік (терең емес) көшіруді орындайды. Алайда, бұл көшірме жеткіліксіз болуы мүмкін. Мысалы: Person классы Company объектісінің сілтемесі бар болсын:
class Person : ICloneable
{
public string Name ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Интерфейстер, олардың сипатталуы және жүзеге асуы. Қабықша кластар
Басқару жүйелерінің интерфейстерін дамыту
Компьютердің ішкі интерфейстері
АДАМ МЕН МАШИНАНЫҢ ӨЗАРА ӘРЕКЕТТЕСТІГІ
C# Тілінің негіздері
Оқиғаларды өңдеу
Visual basic ортасының графикалық мүмкіндіктерін зерттеу, қоңыраулы сағат құру
Криптография туралы мәліметтер
Объектіге бағытталған Java бағдарламалау
Delphi COM технологиялары
Пәндер