Могут ли TBytes, TByteDynArray, Array of Bytes быть безопасно приписаны друг к другу?

Так как TBytes, TByteDynArray и Array of Bytes - это все динамические массивы байтов, могут ли типизированные переменные безопасно присваиваться друг другу? (Если у меня есть переменная TBytes, я могу просто прибегнуть к TByteDynArray при использовании метода, который определяет параметры как TByteDynArray и наоборот?)

Ответ 1

Такие приемы типа совершенно безопасны во всех реализациях Delphi, с которыми я когда-либо сталкивался.

Тем не менее, при интерпретации типов переинтерпретации, подобные этой проверке типов, всегда существует риск того, что будущие изменения исходного кода могут привести к серьезным ошибкам трассировки. Я всегда старался избегать кастинга, если это возможно. Например, самое простое, что вы можете сделать, это не использовать array of Byte как тип кода и переключиться на TBytes.

Если вы должны бросить, то сверните его в функцию, чтобы уменьшить риски, описанные выше.

function Bytes(const B: TByteDynArray): TBytes;
begin
  Result := TBytes(B);
end;