
- •1. .Net архитектурасы.Net-ке бағытталған кодтын орындалуы және компиляциясы. Microsoft Intermediate Language (msil) тілінің артықшылықтары.
- •3. С# программалау тілінің негізі. Айнымалыларды жариялау. Айнымалыларды инициялизациялау олардың көріну облысы.
- •5. Консольді енгізу-шығару үшін System.Console-ді пайдалану. Процессор директивтері.
- •6. Объекті/ ж/е типтер. Структура және кластардың өзара айырмашылық/ы. Класс мүшелері.
- •8. Конструкторлар және статикалық конструкторлар. Тек оқуға рұқсат етілген өріс.
- •9. Жекеленген кластар. Статикалық кластар. Object класы.
- •10. Мұралау. Мұралау типі. Іске асыруды (реализация) мұралау.
- •11. Мұралау. Рұқсат модификаторлары. Интерфейстер.
- •12. Жалпылау. Жалпылауға шолу. Жалпыланған кластар құру.
- •13. Жалпыланған кластар құралдары. Жалпыланған интерфейстер.
- •14. Жалпыланған структуралар. Жалпыланған әдістер.
- •15. Массивтер және кортеждер. Жай массивтер. Көпөлшемді массивтер.
- •16. Тісті массивтер. Array класы.
- •17. Массивтер параметр ретінде. Тізім бойынша санау.
- •18. Кортеждер. Құрылымдық салыстыру.
- •20. Мәліметтердің қарапайым типтерін өзара өзгерту. Қаптама(boxing) құралдарымен мәндер типін сілтеме типке өзгерту.
- •21. Сілтеме типтерді келтіру арқылы өзгерту. Стандартты операцияларды қолданушы типтер үшін асыра жүктеу.
- •Vector структурасы
- •22. Келтіру операцияларын қолданушы типтерге қосу.
- •23. Делегаттар. Лямбда-өрнектер. Уақиғалар.
- •24. Сөз тіркесін құру. Жүйелі өрнектер.
- •25. Сөз тіркесін құру. Форматтаушы өрнектер.
- •26.Интерфейстер және коллекциялар типтері. Тізім, кезек және стектермен жұмыс.
- •27. Сортталған және жүйелі тізімдермен жұмыс. Жиындар мен сөздікті пайдалану.
- •29. Қателер және ерекшеліктер. Ерекшеліктерді өңдеу.
- •30. .Net ядросы. Деректер базасына қосылу. Команданы орындау.
13. Жалпыланған кластар құралдары. Жалпыланған интерфейстер.
Жалпыланған кластар құралдары
Жалпыланған кластарды құру барысында C#-тың қосысша кілттік сөздері қажет болуы мүмкін. Мысалы, жалпыланған типке null мәнін меншіктеу мүмкін емес. Бұл жағдайда default кілттік сөзін қолдануған болады. Егер жалпыланған тип Object класының құралдарын қажет етпесе, бірақ кейбір спецификациялық әдістерді шақыру керек болса, шектеулерді анықтауға болады.
Құжаттар диспетчері оқу және жазу үшін қолданылады. Жаңа DocumentManager консольін құрамыз және DocumentManager<T> класын қосамыз.
using System;
using System.Collections.Generic;
namespace Wrox.ProCSharp.Generics
{ public class DocumentManager<T>
{ private readonly Queue<T> documentQueue=new Queue<T>();
public void AddDocument (T doc)
{ look (this)
{ documentQueue.Enqueue(doc); }
}
public bool IsDocumentAvaiable
{ get {return documentQueue.Count>0; }
}
}
}
Үндеместік бойынша мәндер
Енді DocumentManager<T> класына GetDocument() әдісін қосу керек. Бұл әдістің ішінде Т типі null-ге меншіктену керек. Бірақ жалпыланған типке null-ді меншіктеуге болмайды. Өйткені, жалпыланған тип экземплярды мәннің типі ретінде құруға мүмкіндік береді, ал null тек сілтемелі типтерге ғана жіберіледі. Кілттік сөз арқылы сілтемелі типтерге null мәні меншіктеледі, ал мәндер типіне – 0.
public T GetDocument()
{ T doc=default(T);
lock (this)
{ doc=documentQueue.Decueue();}
return doc;}
Шектеулер
Егер жалпыланған класқа жалпыланған типтен кейбір әдістерді шақыру керек болса, онда шектеулер қосу керек. DocumentManager<T> жағдайында барлық құжаттардың тақырыптары DisplayAllDocuments() әдісінде көріну керек. Document класы Title және Content құрамдарымен Idocument интерфейсін жүзеге асырады.
public interface Idocument
{ string Title {get; set;}
string Content{get; set;}
}
public class Document: Idocument{
public Document()
{
}
public Document (string title, string content)
{ this.title=title;
this.content=content; }
public string Title{get;set;}
public string Content{get; set;}
}
Жалпылаулар қолдайтын шектеулер
Шектеу |
Сипатталуы |
Where T: struct |
Т типі мәндер типі болуы керек |
Where T: class |
Т типі сілтемелі болуы керек |
Where T: IFoo |
Т типі Ifoo интерфейсін жүзеге асыруы керек |
Where T: Foo |
Т типі Foo-ден мұралануы керек |
Where T: new () |
Ттипі үндеместік бойынша конструкторы болуы керек деп көрсететін конструктор шектеуі |
Where T: T2 |
Т1 типі жалпыланған Т2 типінен мұраланатынын көрсету |
Мұралану
Жалпыланған тип жалпыланған интерфейсті жүзеге асыра алады. Жалпыланған класс жалпыланған негізгі кластан мұралануы мүмкін:
public class Base<T>
{
}
public class Derived<T>: Base <T>
{
}
Статикалық мүшелер
Жалпыланған кластардың статикалық мүшелері тек бір класс экземплярымен бөлінеді. мысалы, StaticDemo<T> статикалық х аймағын қамтиды:
public class StaticDemo<T>
{ public static int x; }
Екі статикалық аймақ жиынтығы болады:
StaticDemo<string>.x=4;
StaticDemo<int>.x=5;
Console.WriteLine(StaticDemo<string>.x); // 4-ті жазады
Жалпыланған интерфейстер
Жалпылауды қолдана отырып, әдістерді жалпыланған параметрлермен жариялайтын интерфейстерді анықтауға болады. .NET-те әр түрлі көріністерге көптеген жалпыланған интерфейстер ұсынылады. Мысалы, Icomparable<T>, Icollection<T> және IExtensibleObject<T>. Icomparable<in T> интерфейсі жалпыланған типте құрылған:
public interface Icomparable<in T>
{ int CompareTo (T other); }
Жалпыланбаған ескі Icompareable интерфейсі CompareTo() әдісінде обьектіні талап етеді. LastName қасиеттерін қолдану:
public class Person: Icomparable
{ public int CompareTo(object obj)
{ Person other=obj as Person;
return this. lastname.CompareTo(other.LastName); }
// …
Коварианттылық және контраварианттылық
.NET 4 версиясы шыққанға дейін жалпыланған интерфейстер инвариантты болды. .NET 4-те жалпыланған интерфейстерге және жалпыланған делегаттардың кеңеюінде – коварианттылық және контраварианттылық пайда бодлы. Бұл түсініктер аргумент типтерінің құрылуына және қайтарылатын типтерге қатысты.
.NET-те параметрлер типтері коварианттылы.
Жалпыланған интерфейстердің коварианттылығы
Жалпыланған интерфейс ковариантты, егер жалпыланған тип out кілттік сөзімен болса. Бұл, Т типі қайтарылу ретінде ғана рұқсат етілгендігін білдіреді.Iindex интерфейс Т типімен коварианттылы.
pubic interface Iindex<out T>
{ T this [int index] {get;}
int Count {get;}
}
Жалпыланған интерфейстердің контраварианттылығы
Жалпыланған интерфейс контраварианттылы, егер жалпыланған тип in сөзімен болса. Осылай интерфейс Т жалпыланған типін өз әдістеріне кіріс ретінде тағайындай алады:
public interface Idisplay<in T>
{ void Show (T item); }