Віртуальні класи

Для усунення дублювання об’єктів непрямого базового класу при множинному спадкуванні цей базовий клас оголошують віртуальним. Для цього у списку базових класів перед іменем класу записують ключове слово virtual. Наприклад, клас X буде віртуальним базовим класом при такому описі:

class X {… f(x) …};

class Y : virtual public X {…};

class Z : virtual public X {…};

class D : public Y public Z {…};

Клас D буде включати тільки один примірник X, доступ до якого рівноправно матимуть класи Y та Z.

При множинному спадкуванні один і той же базовий клас може бути включеним у похідний клас одночасно кілька разів, причому як віртуальний так і невіртуальний.

Таким чином, можна констатувати, що віртуальність класу в ієрархії похідних класів є не властивістю класу як такого, а результатом особливостей процедури спадкування.

При використанні множинного спадкування може виникати неоднозначність при зверненні до одноіменних компонент різних базових класів, які усувається за рахунок застосування механізму кваліфікації імен компонентів.

Мова програмування C#

C# - об’єктно-орієнтована мова програмування, створена в 1998-2001 рр. групою інженерів під керівництвом Андерса Хейлсберга (Microsoft) як основна мова розробки застосувань для платформи Microsoft .NET (для мови існують відкриті стандарти ECMA (ECMA-334) і ISO (ISO/IEC 23270).

Компілятор C# входить в стандартну установку самої платформи .NET, тому програми на ньому можна створювати і компілювати навіть без інструментальних засобів, на кшталт Visual Studio.

C# належить до сім’ї мов з C-подібним синтаксисом, її синтаксис найбільш близький до C++ і Java.

Мова має статичну типізацію, підтримує поліморфізм, перевантаження операцій (в точу числі операцій явного і неявного приведення типу), делегати, атрибути, події, властивості, узагальнені типи і методи, літератори, анонімні функції з підтримкою замикань, виключні ситуації, коментарі у форматі XML.

Перейнявши багато що від своїх попередників – мов C++, Java, Delphi, Modulo та Smalltalk – C#, спираючись на практику їх використання, виключає деякі моделі, що зарекомендували себе як проблематичні при розробці програмних систем: так, наприклад, C# не підтримує множинне спадкування класів (на відміну від C++).

Лекція 11