Клас - це абстрактний тип даних. Іншими словами, клас - це деякий шаблон, на основі якого будуть створюватися його екземпляри - об'єкти.
У Сі-шарп класи оголошуються за допомогою ключового слова class. Загальна структура оголошення виглядає наступним чином:
[модифікатор доступу] class [ім'я_класу]
{
// тіло класу
}
Модифікаторів доступу для класів є два:
- Public - доступ до класу можливий з будь-якого місця однієї збірки або з іншої збірки, на яку є посилання;
- Internal - доступ до класу можливий тільки з збірки, в якій він оголошений.
Що таке збірка?
Збірка (assembly) - це готовий функціональний модуль у вигляді exe або dll файлу (файлів), який містить скомпільований код для .NET. Збірка надає можливість повторного використання коду.
При оголошенні класу модифікатор доступу можна не вказувати, при цьому застосовуватиметься режим за замовчуванням internal.
Клас слід оголошувати всередині простору імен namespace, але за межами іншого класу (можливо також оголошення класу всередині іншого - вкладені типи, але це тема окремого уроку).
Приклад оголошення класів Student і Pupil:
namespace HelloWorld
{
class Student // без вказівки модифікатор доступу, клас буде internal
{
// тіло класу
}
public class Pupil
{
// тіло класу
}
}
Члени класу
Класи в Сі-шарп можуть містити наступні члени:
- Поля;
- Константи;
- Властивості;
- Конструктори;
- Методи;
- Події;
- Оператори;
- Індексатори;
- Вкладені типи.
Всі члени класу, як і сам клас, мають свій рівень доступу. Тільки у членів їх може бути вже п'ять:
- Public - доступ до члена можливий з будь-якого місця однієї збірки, або з іншої збірки, на яку є посилання;
- Protected - доступ до члена можливий тільки усередині класу, або в класі-спадкоємця (при спадкуванні);
- Internal - доступ до члена можливий тільки з збірки, в якої він проголошений;
- Private - доступ до члена можливий тільки всередині класу;
- Protected internal - доступ до члена можливий з однієї збірки, або з класу-спадкоємця інший збірки.
Не вказавши модифікатор доступу для члена, за замовчуванням йому буде присвоєно режим private.
За допомогою модифікаторів доступу в Сі-шарп реалізується один із базових принципів ООП - інкапсуляція.
У цьому уроці ми розглянемо такі члени класу, як поля і константи.
Поля класу
Поле - це змінна, оголошена усередині класу. Як правило, поля оголошуються за модифікаторами доступу private або protected, щоб заборонити прямий доступ до них. Для отримання доступу до полів слід використовувати властивості або методи.
Приклад оголошення полів у класі:
class Student
{
private string firstName;
private string lastName;
private int age;
public string group; // Не рекомендується використовувати public для поля
}
Створення об'єктів
Оголосивши клас, ми тепер можемо створювати об'єкти. Робиться це за допомогою ключового слова new і імені класу:
namespace HelloWorld
{
class Student
{
private string firstName;
private string lastName;
private int age;
public string group;
}
class Program
{
static void Main (string [] args)
{
Student student1 = new Student (); // створення об'єкта student1 класу Student
Student student2 = new Student ();
}
}
}
Доступ до членів об'єкта здійснюється за допомогою оператора точка «.»:
static void Main (string [] args)
{
Student student1 = new Student ();
Student student2 = new Student ();
student1.group = "Group1";
student2.group = "Group2";
Console.WriteLine (student1.group); // Виводить на екран "Group1"
Console.Write (student2.group);
Console.ReadKey ();
}
Такі поля класу Student, як firstName, lastName і age вказані з модифікатором доступу private, тому доступ до них буде заборонений поза класом:
static void Main (string [] args)
{
Student student1 = new Student ();
student1.firstName = "Nikolay"; // помилка, немає доступу до полю firstName. Програма не скомпілюється
}
Константи
Константи-члени класу нічим не відрізняються від простих констант всередині методів, які розглядалися в уроці змінні і константи.
Константа - це змінна, значень якої не можна змінити. Константа оголошується за допомогою ключового слова const. Приклад оголошення константи:
class Math
{
private const double Pi = 3.14;
}
Домашнє завдання
Створіть який-небудь клас (наприклад клас Автомобіль), оголосіть в ньому поля з різними режимами доступу (private, protected, internal, public). Створіть об'єкт класу, і спробуйте записати / отримати дані з різних полів.