- •Кластар жиынтығы. Қасиеті. Унарлық және бинарлық операторлар.
- •Қасиет.
- •Қатынас функциялары
- •Қасиет және мұрагерлік
- •Интерфейстерде қасиетті хабарлау мысалы
- •Статикалық қасиет
- •Индексаторлар
- •Интерфейстер және индексаторлар
- •Қасиет пен индексатор арасындағы айырмашылық
- •Унарлық операторлар
- •Бинарлық операторлар
- •Айқындалмаған анықталу
- •Айқындалмаған және айқындалған анықталу мысалы
- •// Int түріндегі SomeClass айқындалмаған анықталуы
- •Практикалық мысал. Матрица класы.
- •Үй тапсырмасы
Интерфейстерде қасиетті хабарлау мысалы
using System;
interface ISome
{
string Name
{
get;
set;
}
}
class SomeClass : ISome
{
// Өріс
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()
{
ISome i1 = new SomeClass();
ISome i2 = new SomeClassD();
Console.WriteLine("SomeClass: {0}", i1.Name);
Console.WriteLine("SomeClassD: {0}", i2.Name);
i1.Name = "Hello";
i2.Name = "Hello";
Console.WriteLine("SomeClass: {0}", i1.Name);
Console.WriteLine("SomeClassD: {0}", i2.Name);
}
}
*****
Статикалық қасиет
C# толық класқа жататын статикалық қасиетті анықтайды. Статикалық қасиеттер virtual, override немесе abstract модификаторларымен хабарланбайды.
class SomeClass
{
static int count = 0;
static public int Count
{
get
{
return count;
}
}
public SomeClass()
{
++count;
}
}
class Test
{
static void Main()
{
Console.WriteLine("Count = {0}", SomeClass.Count); // 0
SomeClass s = new SomeClass();
Console.WriteLine("Count = {0}", SomeClass.Count); // 1
}
}
***** Қасиет айнымалы емес. Оған функция қасиеттері сияқты ref нгемесе out параметрлерімен беруге болмайды.*****
Индексаторлар
Индексаторлар қасиетке ұқсас, бірақ олардың функцияға қатынасын параметрлер қабылдайды.
Мысал
using System;
using System.Collections;
class SomeClass : IEnumerable // foreach қолдану үшін
{
// Өріс
string [] words;
// Сандық индексатор
public string this [int index]
{
// Оқу функциясы
get
{
if(index < 0 || index >= words.Length)
throw new IndexOutOfRangeException();
return words[index];
}
// Жазу функциясы
set
{
if(index < 0 || index >= words.Length)
throw new IndexOutOfRangeException();
words[index] = value;
}
}
// Жолдық индексатор
public int this [string name]
{
// Оқу функциясы
get
{
// Берілген жолға сәйкес индексті іздеу
return Array.IndexOf(words, name);
}
}
public SomeClass(int n)
{
if(n >= 0)
words = new string[n];
}
// IEnumerable интерфейсін тарату
public IEnumerator GetEnumerator()
{
// Массивтер IEnumerable интерфейсін өздері таратады
return words.GetEnumerator();
}
}
class Test
{
static void Main()
{
SomeClass sc = new SomeClass(3);
// Сандық индексаторды қолдану
sc[0] = "book";
sc[1] = "bird";
sc[2] = "beer";
//Массив мәндерінің толып кетуі
foreach(string s in sc)
{
Console.WriteLine(s);
}
// Жолдық индексаторды қолданамыз
Console.WriteLine(sc["beer"]);
Console.WriteLine(sc["boat"]);
}
}
