Курс лекцій
МОВА ПРОГРАМУВАННЯ
C#
© Васильєв О.М.
Лекція 6.
Класи та об’єкти.
Вступ
Основні поняття
Класи – основа об’єктно-орієнтованого
програмування (ООП). Всередині класу
визначаються дані та програмний код для їх
обробки.
Дані реалізуються через поля, а код – через
методи
Об’єкт – екземпляр класу. Створюється на основі
класу. Клас при цьому виступає в ролі своєрідного
шаблона.
Члени класу – поля та методи класу
Оголошення класу
class ім’я_класу {
рівень_доступу тип поле_1;
рівень_доступу тип поле_2;
...
рівень_доступу тип поле_N;
рівень_доступу тип_результату метод_1(аргументи){
|| код методу
}
рівень_доступу тип_результату метод_2(аргументи){
|| код методу
}
...
рівень_доступу тип_результату метод_M(аргументи){
|| код методу
}
}
Рівні доступу
public – відкритий член класу, який доступний в класі
та за його межами
private – закритий член класу, який доступний лише в
межах коду класу
protected – захищений член класу, який доступний
лише в межах коду класу, та який разом з тим
наслідується у підкласах
За умовчанням (якщо ідентифікатор рівня
доступу не вказано), член класу вважається
закритим (тобто private)
Створення об’єктів
Ім’я_класу об’єкт;
об’єкт=new Ім’я_класу(аргументи);
або
Конструктор
Об’єктна
змінна
Ім’я_класу об’єкт=new Ім’я_класу(аргументи);
Об’єктна змінна
адреса об’єкта
Створюється
оператором new
Об’єкт
Приклад (шаблон)
class MyClass{
........................
}
class TheMainClass{
public static void Main(){
MyClass obj;
obj=new MyClass();
Код класу
Створення
об’єкту
// Або так:
MyClass obj=new MyClass();
// Звернення до членів об’єкту:
obj.поле=значення;
obj.метод(аргументи);
}}
Звернення
до членів
об’єкту
Приклад створення класу
using System;
class MyClass{
Запустити
public int num;
public char symb;
public void show(){
Console.WriteLine("Значення поля num = "+num);
Console.WriteLine("Значення поля symb = " + symb);}}
class MakeClass{
public static void Main(){
MyClass obj = new MyClass();
obj.num = 100;
obj.symb = 'A';
obj.show();
Console.ReadLine();}}
Конструктори
Конструктор – метод, який викликається автоматично
при створенні об’єкта
Синтаксис оголошення конструктора:
public Ім’я_класу(аргументи){
..................................................
}
Правила оголошення конструктора:
 Ім’я конструктора співпадає з іменем класу
 Конструктор не повертає результат і ідентифікатор
типу результату для нього не вказується
 Конструктор може мати аргументи
Приклад використання конструктора
using System;
class MyClass{
Запустити
public int num;
public char symb;
public MyClass(){
num = 200;
symb = 'B';}
public void show(){
Console.WriteLine("Значення поля num = " + num);
Console.WriteLine("Значення поля symb = " + symb);}}
class ClassWithConstructor{
static void Main(){
MyClass obj = new MyClass();
obj.show();
Console.ReadLine();}}
Конструктор з аргументами
using System;
class MyClass{
Запустити
public int num;
public char symb;
public MyClass(int n,char s){
num = n;
symb = s;}
public void show(){
Console.WriteLine("Значення поля num = " + num);
Console.WriteLine("Значення поля symb = " + symb);}}
class ClassWithConstructor2{
static void Main(){
MyClass obj = new MyClass(300,'C');
obj.show();
Console.ReadLine();}}
Перевантаження конструктора
using System;
class MyClass{
public int num;
Запустити
public char symb;
public MyClass(){ num = 0;
symb='Z';}
public MyClass(int num, char symb){
this.num = num;
this.symb = symb;}
public void show(){
Console.WriteLine("Значення поля num = " + num);
Console.WriteLine("Значення поля symb = " + symb);}}
class ClassWithConstructor3{
static void Main(){
MyClass objA = new MyClass();
objA.show();
MyClass objB = new MyClass(400,'D');
objB.show();
Console.ReadLine();}}
Ключове слово this
Ключове слово this – посилання на об’єкт, з якого
викликається метод (який створюється
конструктором)
Перевантаження методів
Перевантаження методів – оголошення різних
варіантів одного методу. Різні варіанти методу
мають однакові імена, але різні списки
аргументів (за кількістю чи/або типом). Можуть
повертати різний результат.
Потрібна версія методу визначається на основі
команди виклику
Перевантаження методу
using System;
class MyClass{
public int num;
public char symb;
public MyClass():this(-1,'X'){}
public MyClass(int num, char symb){
set(num,symb);}
void show(){
Console.WriteLine("Значення поля num = " + num);
Console.WriteLine("Значення поля symb = " + symb);}
public void set(int num,char symb){
this.num=num;
this.symb=symb;
show();}
public void set(){
set(0, 'A');}
public void set(int num,int code){
set(num,(char)code);}
}
Перевантаження методу
class MethodOverload{
Запустити
static void Main(){
MyClass objA = new MyClass();
MyClass objB = new MyClass(-100,'Y');
objA.set();
objA.set(-200,'W');
objA.set(-300,284);
Console.ReadLine();}
}
Деструктор
Деструктор – метод, який викликається при
вивільненні пам’яті, яку займає об’єкт
Це відбувається до завершення роботи програми
(точніше невідомо)
Синтаксис оголошення деструктора:
~Ім’я_класу(){
..................................................
}
Правила оголошення деструктора:
 Ім’я деструктора: знак «тильда» плюс ім’я класу,
тобто, наприклад ~MyClass()
 Деструктор не повертає результат і ідентифікатор
типу результату для нього не вказується
 Деструктор не має аргументів і не перевантажується
Деструктор
using System;
class MyClass{
public int num;
Запустити
public char symb;
public MyClass(int num, char symb){
this.num = num;
this.symb = symb;
Console.WriteLine("Значення поля num = " + num);
Console.WriteLine("Значення поля symb = " + symb);}
~MyClass(){
Console.WriteLine("Видалено об'єкт!");
Console.ReadLine();}}
class DestructorDemo{
static void Main(){
new MyClass(100,'A');}}
Download

Завантажити