- •Кластар жиынтығы. Қасиеті. Унарлық және бинарлық операторлар.
- •Қасиет.
- •Қатынас функциялары
- •Қасиет және мұрагерлік
- •Интерфейстерде қасиетті хабарлау мысалы
- •Статикалық қасиет
- •Индексаторлар
- •Интерфейстер және индексаторлар
- •Қасиет пен индексатор арасындағы айырмашылық
- •Унарлық операторлар
- •Бинарлық операторлар
- •Айқындалмаған анықталу
- •Айқындалмаған және айқындалған анықталу мысалы
- •// Int түріндегі SomeClass айқындалмаған анықталуы
- •Практикалық мысал. Матрица класы.
- •Үй тапсырмасы
Интерфейстер және индексаторлар
Индексаторды интерфейсте таратқанда мына ережені сақтау керек: индексатор модификаторларсыз жазылады, индексатор денесіз қатынас функциясынан тұруы керек.
interface IMyInterface
{
...
// Индексаторды хабарлау
string this[int index]
{
get;
set;
}
}
Қасиет пен индексатор арасындағы айырмашылық
Кесте түрінде көрсетеміз:
Қасиет |
Индексаторлар |
Аты бойынша идентифицирленеді |
Сигнатуре бойынша идентифицирленеді |
Қатынас нүкте арқылы класс мүшесі ретінде жасалады |
Қатынас квадрат жақшаға алынып массив элемент ретінде жасалады |
Кластың статикалық немесе статикалық емес мүшесі болады |
Кластың тек статикалық емес мүшесі болады |
Қатынас функциясы get параметрлері болмайды |
Қатынас функциясы get параметрлері тізімі индексаторлар сияқты болады |
Қатынас функциясы set дайын параметрі value болады |
Қатынас функциясы set дайын параметрі value қосымша параметрлері тізімі индексаторлар сияқты болады |
***** Индексаторлар айнымалы болмайды. *****
Унарлық операторлар
Унарлық оператолар: +, -, !, ~, ++, --, true, false
Қайталап орындалатын унарлық операторлардың бір ғана параметрі болуы керек. Бұл параметр функция тарататын класс түрімен бірдей болуы керек.
using System;
class SomeClass
{
int i;
public SomeClass(int value)
{
i = value;
}
public static int operator - (SomeClass s)
{
return -s.i;
}
}
class Test
{
static void Main()
{
SomeClass sc = new SomeClass(10);
Console.WriteLine(-sc);
}
}
C++ айырмашылығы қайталап орындалатын операторлар инкремент (++) және декремент (--), постфикс пен префикс ажыратылмайды. Сондықтан екі жағдайда бірден анықталады.
using System;
class SomeClass
{
int i;
public SomeClass(int value)
{
i = value;
}
// операторлар ++ және – қайтарылатын мәндер
// класс түрінде болуы керек
public static SomeClass operator ++ (SomeClass s)
{
++s.i;
return s;
}
public override string ToString()
{
return i.ToString();
}
}
class Test
{
static void Main()
{
SomeClass sc = new SomeClass(10);
Console.WriteLine(++sc);
Console.WriteLine(sc++);
}
}
Операторлар true және false логикалық түрлерге қолданылады, мына өрнектер эквивалентті емес:
if(a == true)
if(! (a == false))
Бұл SQL деректері түріне тән. Бұл жағдайда компилятор операторлар true және false дұрыс есептеуге қолдануы мүмкін. Бұл операторлар bool түрін қайтару және бірге орындалуы керек.
using System;
class SomeClass
{
int i;
public SomeClass(int value)
{
i = value;
}
public override string ToString()
{
return i.ToString();
}
public static bool operator true(SomeClass s)
{
return s.i != 0;
}
public static bool operator false(SomeClass s)
{
return s.i == 0;
}
}
class Test
{
static void Main()
{
SomeClass sc = new SomeClass(10);
if(sc)
Console.WriteLine("yes");
else
Console.WriteLine("no");
}
}
