- •Кластар жиынтығы. Қасиеті. Унарлық және бинарлық операторлар.
- •Қасиет.
- •Қатынас функциялары
- •Қасиет және мұрагерлік
- •Интерфейстерде қасиетті хабарлау мысалы
- •Статикалық қасиет
- •Индексаторлар
- •Интерфейстер және индексаторлар
- •Қасиет пен индексатор арасындағы айырмашылық
- •Унарлық операторлар
- •Бинарлық операторлар
- •Айқындалмаған анықталу
- •Айқындалмаған және айқындалған анықталу мысалы
- •// Int түріндегі SomeClass айқындалмаған анықталуы
- •Практикалық мысал. Матрица класы.
- •Үй тапсырмасы
Кластар жиынтығы. Қасиеті. Унарлық және бинарлық операторлар.
C# элементтерді сақтайтын кластар – бұл System.Array массиві. Бірақ класс – массив бір ғана дайын класс болып есептелінбейді. Деректердің дайын түрлері System.Collections аймағында анықталған. Мысалы:
ArrayList - өлшемдері тез өзгеріп отыратын массивтер үшін қолданылады. IList,ICollection,IEnumerable,ICloneable интерфейстерін таратады.
Stack – кәдімгі стек. ICollection,Ienumerable таратады.
Queue – стандартты кезек (FIFO – бірінші келді, бірінші кетті). IList,ICollection,IEnumerable,ICloneable интерфейстерін таратады.
Кластар жиынтығының жұмыс істеуі ұқсас болады. Мысалы: ArrayList кластар жиынтығының жұмыс істеуін қарастырайық.
using System;
using System.Collections;
class Man
{
public string name;
public string surname;
public Man(string name,string surname){
this.name=name;
this.surname=surname;
}
public void Show(){
Console.WriteLine("Аты={0} Фамилия={1}",name,surname);
}
}
class Sample
{
static void Main()
{
try
{
ArrayList ar = new ArrayList();
ar.Add(new Man("Аділ","Асқаров")); // элементті қосу
ar.Add(new Man("1","2"));
foreach(Man b in ar){
b.Show();
}
Console.WriteLine("\n\n");
ar.RemoveAt(0);// элементті өшіру
foreach(Man b in ar){
b.Show();
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
}
}
Қасиет.
Қасиет - бұл класстар, құрылымдар және интерфейстер мүшесі, яғни қатынас функциясы (accessors) арқылы жабық өрістер мәндерін есептейді, оқиды және жазады.
.Net Runtime класс функцияларын қасиет атымен байланыстыратын таратылуларды қосымша метадеректер арқылы орындайды. Осыған байланысты бір тілдерде қасиет қасиет ретінде, ал енді біреулерінде жай класса функциялары ретінде көрінеді.
Қатынас функциялары
Қасиеттерді хабарлау кезінде программалық кодтың бір немесе екі өрісін көрсету керек. Бұлар қатынас функциялары (accessors) деп аталады. Қатынас функциялары оқиды және қасиеттің жаңа мәнін береді.
class SomeClass
{
// Өріс
int size;
// Қасиет
public int Size
{
// Оқу функциясы
get
{
return size;
}
// Жазу функциясы
set
{
// value – арнайы айнымалы,
// меншіктелу ұзындығынан тұрады;
// value түрі қасиет түрімен сәйкес келеді
size = value;
}
}
}
class Test
{
static void Main()
{
SomeClass sc = new SomeClass();
Console.WriteLine(sc.Size); // get функциясы
sc.Size = 100; // set функциясы
Console.WriteLine(sc.Size); // get функциясы
}
}
Шектеу
get функциясы мәнді қайтарады немесе мән бергізбейді, себебі set функциясының ішінде локальдық айнымалы value қолдануға болмайды.
Қасиет және мұрагерлік
Қасиет те класс функциясы сияқты модификаторлар virtual, override және abstract хабарлануы мүмкін. Модификаторлар хабарлау қасиетін қосып екі қатынас функциясына таратады. Хабарлау кезінде туынды класс қасиеті сол атпен қалады, ал негізгі класс қасиеті жасырынады.
Полиморфтік қасиет мысалы
class SomeClass
{
// Өріс
string name;
// Қасиет
virtual public string Name
{
// Оқу функциясы
get
{
return name != null ? name : "Not avaiable";
}
// Жазу функциясы
set
{
name = value;
}
}
}
class SomeClassD : SomeClass
{
// Өріс
string name;
// Қасиет
override public string Name
{
// Оқу функциясы
get
{
return name != null ? name : "Not avaiable yet";
}
// Жазу функциясы
set
{
name = value.ToUpper();
}
}
}
class Test
{
static void Main()
{
SomeClass sc1 = new SomeClass();
SomeClass sc2 = new SomeClassD();
Console.WriteLine("sc1: {0}", sc1.Name);
Console.WriteLine("sc2: {0}", sc2.Name);
sc1.Name = "Hello";
sc2.Name = "Hello";
Console.WriteLine("sc1: {0}", sc1.Name);
Console.WriteLine("sc2: {0}", sc2.Name);
}
}
