Наследование от общего предка

Проблема наследования от общего предка характерна, в первую очередь, для множественного наследования классов. Если класс 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 Прародитель всех встроенных и пользовательских типов