- •1 Завдання на лабораторну роботу
- •1.1 Індивідуальне завдання
- •2 Методичні вказівки
- •2.1 Ініціалізатори об'єктів
- •2.1 Статичні класи
- •2.1.3 Методи, які розширюють існуючі класи
- •6 Перевантаження операцій
- •2.8 Успадкування
- •2.1 Поліморфізм. Інтерфейси
- •2.2 Структури і перелічення
- •2.3 Вкладені типи
- •3 Приклади програм
- •3.1 Ієрархія об'єктів реального світу
- •3.2 Знаходження мінімуму методом дихотомії
- •3.3 Ієрархія книжкових полиць
- •4 Вправи
- •5 Контрольні запитання
2 Методичні вказівки
2.1 Ініціалізатори об'єктів
Традиційно в мовах об'єктно-орієнтованого програмування для ініціалізації об'єктів застосовують конструктори з параметрами. Але іноді таких конструкторів не вистачає і тоді після створення об'єктів значення необхідних властивостей встановлюють вручну. Використовуючи версію 3.0 мови C# (та пізніші версії), можна ініціалізувати відкриті властивості та відкриті поля у спеціальному блоці під час створення об'єкта. Вирази ініціалізації перелічуються через кому.
Припустимо, описано такий клас:
public class Point
{
public int X { get; set; }
public int Y { get; set; }
}
Можна запропонувати два варіанти:
Point p = new Point { X = 10, Y = 20 };
Point p1 = new Point() { X = 100, Y = 200 };
У наведених прикладах спочатку викликається конструктор без параметрів, після завершення роботи якого здійснюється запис указаних значень у властивості. Можна також викликати конструктор з параметрами.
public class Point
{
public int X { get; set; }
public int Y { get; set; }
public Point() { }
public Point(int x, int y)
{
X = x;
Y = y;
}
}
...
Point p = new Point(1, 2) { X = 10, Y = 20 };
Оскільки блок ініціалізації виконується після виконання тіла конструктора, значення, визначені у блоці, затирають значення, присвоєні у конструкторі. Більше сенсу має інший приклад, у якому ініціалізується властивість Color відповідного типу, визначеного в просторі імен System.Drawing. Координати точки можна визначити через конструктор, а для завдання кольору немає відповідного конструктора, тому доцільно скористатись ініціалізатором.
public class Point
{
public int X { get; set; }
public int Y { get; set; }
public System.Drawing.Color Color { get; set; }
public Point() { }
public Point(int x, int y)
{
X = x;
Y = y;
}
}
...
Point p = new Point(1, 2) { Color = System.Drawing.Color.Blue };
Іноді виникає потреба у вкладених ініціалізаторах. Припустимо, клас Rectangle (прямокутник) містить опис властивостей типу Point:
public class Rectangle
{
public Point LeftTop { get; set; }
public Point RightBottom { get; set; }
}
Тоді можна викликати конструктори всередині блоку ініціалізації:
Rectangle rect = new Rectangle
{
LeftTop = new Point(0, 0),
RightBottom = new Point(30, 40)
};
Можна також запропонувати наступну вкладену ініціалізацію:
Rectangle rect = new Rectangle
{
LeftTop = new Point { X = 0, Y = 0 },
RightBottom = new Point { X = 30, Y = 40 }
};
2.1 Статичні класи
Починаючи з версії 2.0, мова C# підтримує так звані статичні класи. Такі класи можуть містити тільки статичні елементи.
public static class Static
{
private static int k = 144;
public static int GetK()
{
return k;
}
}
Статичні класи не можна використовувати для створення об'єктів, вони не можуть бути застосовані як базові. Статичний клас може мати статичний конструктор.
