Віртуальні класи
Для усунення дублювання об’єктів непрямого базового класу при множинному спадкуванні цей базовий клас оголошують віртуальним. Для цього у списку базових класів перед іменем класу записують ключове слово 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