Проблема наследования от общего предка характерна, в первую очередь, для множественного наследования классов. Если класс C является наследником классов A и B, а те, в свой черед, являются наследниками класса Parent, то класс наследует свойства и методы своего предка Parent дважды, один раз получая их от класса A, другой от — B. Это явление называется еще дублирующим наследованием. Для классов ситуация осложняется тем, что классы A и B могли по-разному переопределить методы родителя и для потомков предстоит сложный выбор реализации.
Для интерфейсов сама ситуация дублирующего наследования маловероятна, но возможна, поскольку интерфейс, как и любой класс, может быть наследником другого интерфейса. Поскольку у интерфейсов наследуются только сигнатуры, а не реализации, как в случае классов, то проблема дублирующего наследования сводится к проблеме коллизии имен. По-видимому, естественным решением этой проблемы в данной ситуации является склеивание, когда методам, пришедшим разными путями от одного родителя, будет соответствовать единая реализация.
СИНТАКСИС ЯЗЫКА
1. Концепция типа данных. Встроенные типы данных и их реализация в языке С#
Концепция типов данных состоит в том, что каждой информации приписывается тип, который описывается:
1) множеством допустимых значений типа,
2) набором операций для этого типа,
3) диапазоном допустимых значений,
4) количеством памяти, необходимой для хранения данного типа.
Тип данных определяет допустимые действия над данными.
Все встроенные типы C# однозначно отображаются, а фактически совпадают с системными типами каркаса Net Framework, размещенными в пространстве имен System. Поэтому всюду, где можно использовать имя типа, например, — int, с тем же успехом можно использовать и имя System.Int32.
Таблица, содержащая описание всех встроенных типов языка C# и их осн. характеристики
Логический тип | |||
Имя типа | Системный тип | Значения | Размер |
Bool | System.Boolean | true, false | 8 бит |
Арифметические целочисленные типы | |||
Имя типа | Системный тип | Диапазон | Размер |
Sbyte | System.SByte | -128 — 127 | Знаковое, 8 Бит |
Byte | System.Byte | 0 — 255 | Беззнаковое, 8 Бит |
Short | System.Short | -32768 —32767 | Знаковое, 16 Бит |
Ushort | System.UShort | 0 — 65535 | Беззнаковое, 16 Бит |
Int | System.Int32 | (-2*10^9 — 2*10^9) | Знаковое, 32 Бит |
Uint | System.UInt32 | (0 — 4*10^9) | Беззнаковое, 32 Бит |
Long | System.Int64 | (-9*10^18 — 9*10^18) | Знаковое, 64 Бит |
Ulong | System.UInt64 | (0— 18*10^18) | Беззнаковое, 64 Бит |
Арифметический тип с плавающей точкой | |||
Имя типа | Системный тип | Диапазон | Точность |
Float | System.Single | +1.5*10^-45 -/+3.4*10^38 | 7 цифр |
Double | System.Double | +5.0*10^-324 -/+1.7*10^308 | 15-16 цифр |
Арифметический тип с фиксированной точкой | |||
Имя типа | Системный тип | Диапазон | Точность |
Decimal | System.Decimal | +1.0*10^-28 - +7.9*10^28 | 28-29 значащих цифр |
Символьные типы | |||
Имя типа | Системный тип | Диапазон | Точность |
Char | System.Char | U+0000 - U+ffff | 16 бит Unicode символ |
String | System.String | Строка из символов Unicode | |
Объектный тип | |||
Имя типа | Системный тип | Примечание | |
Object | System.Object | Прародитель всех встроенных и пользовательских типов |