В чем разница между приведением и преобразование типов?

Не могу понять

Правда, преобразование несовместимых типов все-таки может быть осуществлено путем приведения. Приведение типов, по существу, означает явное их преобразова­ние. (из книги)

Получается приведение и есть преобразование?


Ответы (1 шт):

Автор решения: Швеев Алексей

Преобразование типов

Значение типа T1 изменяется так, что бы стать значением типа T2. Так например преобразование из int во float требует выделение битов под положение точки в значении. Или же при преобразовании int в string необходимо получить коды символов, которые бы отражали записанное значение в int.

Приведение типов

Объект с типом T1 выражен через переменную T2, при этом структура объекта не меняется. Так например у нас имеется T1 : T2, где T1 - дочерний элемент, а T2 - родительский. Когда мы прописываем

T2 someVariable = new T1()

Мы выделяем в памяти место для нового типа T1, однако данные в этом типе устроены так, что бы этот тип можно было прочитать так же, как и T2 не изменяя сами данные.

Пример:

Допустим у нас есть 2 класса:

class A {
  int aValue;
}

class B : A {
  int bValue
}

Тогда инициализация этих объектов в памяти будет выглядеть так:

var a = new A() // [..., int<aValue>, ...]

var b = new B() // [..., int<aValue>, int<bValue>, ...]

При этом a и b это указатели на первый элемент данных

Таким образом если мы сделаем

A b_as_a = b

То внутренняя структура объекта не изменится, но мы будем всё так же иметь доступ к первому значению int<aValue>, ведь его сдвиг относительно начала объекта для всех дочерних объектов будет одинаковый

Подробнее прочитать про даункаст (приведение дочернего типа к родительскому) можно здесь

P. S.: Разумеется на практике всё работает немного сложнее, чем я описал сейчас, но этого достаточно что бы понять общую концепцию

→ Ссылка