Визначення класу на мові С#:
class клас {
тип мінлива;
тип метод(аргументи) {
програмний код
}
}
Визначення класу складається з визначення поля класу (інформація, що описує об'єкти даного класу) і методів класу (дії, які можуть виконувати об'єкти даного класу, або можна виконувати над об'єктами даного класу).
Об'єктно-орієнтованих підхід у програмування спирається на наступні принципи:
- інкапсуляція;
- спадкування;
- поліморфізм.
Інкапсуляція - здатність ховати деталі реалізації об'єктів від користувачів цих об'єктів. Інкапсуляція, з одного боку, дозволяє приховувати від користувача об'єкта деталі його внутрішньої реалізації (принцип "чорного ящика"), а, з іншого боку, використовується для запобігання неконтрольованого доступу до внутрішніх даними об'єкта.
Спадкування - можливість створювати нові визначення класів на основі існуючих, розширюючи і перевизначаючи їх функціональність. Спадкування використовується для повторного використання коду. Спадкування буває двох видів: ставлення типу "мати" (класичне спадкування) і ставлення типу "мати" (включення або делегування).
Поліморфізм - підтримка виконання потрібного дії в залежності від типу переданого об'єкта. Поліморфізм застосовується для універсальної обробки схожих об’єктів різних типів. Поліморфізм буває двох видів: заснований на "ранньому зв'язуванні" (використовує механізм віртуальних методів в класах, пов'язаних класичним спадкуванням) і "пізньому зв'язуванні" (використовується для об'єктів, не пов'язаних спадкуванням).
Для реалізації інкапсуляції в мові C# використовуються модифікатори доступу і властивості. Мова Із# підтримує наступні модифікатори доступу (модифікатори видимості):
- public - поля, властивості й методи є загальнодоступними.
- private - поля, властивості й методи будуть доступні тільки в класі, в якому вони визначені.
- protected - поля, властивості й методи будуть доступні як в класі, в якому вони визначені, так і в будь-якому похідному класу.
- internal - поля, властивості й методи будуть доступні у всіх класах всередині збирання, в якій визначено клас.
Для контролю доступу до полів класу в мові C# можна використовувати властивості. Всередині класу властивість визначається у вигляді пари методів для присвоєння значення властивостей і для читання значення властивості. Для користувачів об'єктів класу властивість представляється як поле класу. Синтаксис визначення властивості класу:
тип властивість {
get {
return значення;
}
set {
поле=value;
}
}
Метод get використовується для отримання значення властивості. Метод set використовується для зміни значення властивості. Всередині методу set нове значення властивості передається у вигляді змінної value. За допомогою властивостей можна перевірити нове значення поля, перш ніж змінити поле; виконати додаткові дії при зміні або читанні поля, представити для користувача у вигляді поля інформацію, яка насправді не є полем класу.
Для реалізації класичного спадкування в мові C# використовується наступний синтаксис:
class нащадок: батько {
}
Мова C# не підтримує множинного спадкування. Для виклику в конструкторі класу-нащадка конструктора класу-батька використовується ключове слово base:
class нащадок: батько {
нащадок(аргументи):base(аргументи){
}
}
Також ключове слово base використовується для дзвінків методів класу-батька з’язок перевизначених методів в класі-нащадка. Мова C# також підтримує спадкування включенням.
Для реалізації поліморфізму, заснованого на віртуальних методи, в мові C# використовуються ключові слова virtual і override:
class батько {
virtual метод(аргументи){
}
}
class нащадок: батько {
override метод(аргументи){
}
}
Крім того, мова C# підтримує оголошення абстрактних методів з допомогою ключового слова abstract. Абстрактні методи не містять реалізації і повинні бути замінені з допомогою ключового слова override в класах-нащадків. Клас, в якому оголошений хоча б один абстрактний метод, є абстрактним і повинен бути оголошений у допомогою ключового слова abstract. Об'єкти абстрактного класу не можуть бути створені.