Я написал статью на эту тему несколько лет назад:
Что такое нетипизированный параметр?
Нетипизированные параметры используются в нескольких ситуациях; TStream.Read
метод, о котором вы спрашиваете, наиболее близко совпадает с Move
процедурой, о которой я писал. Вот выдержка:
procedure Move(const Source; var Dest; Count: Integer);
Процедура Move
копирует данные из произвольной переменной
в любую другую переменную. Необходимо принять источники и направления
все типы, что означает, что он не может требовать какого-либо одного типа. Процедура
не изменяет значение переменной, переданной для Source
, так что
объявление параметра использует const
вместо var
, который является
более распространенный модификатор для нетипизированных параметров.
В случае TStream.Read
источником является содержимое потока, поэтому вы не передаете его в качестве параметра, а местом назначения является параметр Buffer
, показанный в вопросе. Вы можете передать любой тип переменной для этого параметра, но это означает, что вы должны быть осторожны. Это ваша задача, а не компилятор, чтобы гарантировать, что содержимое потока действительно является допустимым значением для типа параметра, который вы предоставляете.
Прочитайте остальную часть моей статьи, чтобы узнать больше о ситуациях, когда Delphi использует нетипизированные параметры.