Курс лекцій МОВА ПРОГРАМУВАННЯ 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');}}