Упаковка и распаковка: различия между версиями

Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
(Новая: == Ссылки == *Особенности языка: продвинутый уровень *[http://pascalabc.net/ru/bazovyie-osobennosti-yazyika-i-bibliotek.html Сайт PascalAB...)
 
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 1: Строка 1:
Упаковка-распаковка размерных типов. Переменной типа Object можно присвоить любой размерный тип, при этом происходит его упаковка. Для обратного преобразования требуется явное приведение типа, которое называется распаковкой.
<source lang="Delphi">var
  i: integer := 2;
  r: real := 3.14;
  o: object;
begin
  o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа,
          // котрый и присваивается переменной o
          // Преобразование типов при упаковке - неявное
  writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение       
                      // Преобразование типов при распаковке - явное
  o := r;
  writeln(real(o));
 
  try // При неверном преобразовании типов генерируется исключение InvalidCastException
    writeln(shortint(o));
  except
    on e: Exception do
      writeln(e.GetType);
  end;
end.</source>
== Ссылки ==
== Ссылки ==
*[[Особенности языка: продвинутый уровень]]
*[[Особенности языка: продвинутый уровень]]
*[http://pascalabc.net/ru/bazovyie-osobennosti-yazyika-i-bibliotek.html Сайт PascalABC.NET: Особенности языка]
*[http://pascalabc.net/ru/bazovyie-osobennosti-yazyika-i-bibliotek.html Сайт PascalABC.NET: Особенности языка]

Текущая версия от 22:49, 15 января 2010

Упаковка-распаковка размерных типов. Переменной типа Object можно присвоить любой размерный тип, при этом происходит его упаковка. Для обратного преобразования требуется явное приведение типа, которое называется распаковкой.

var 
  i: integer := 2;
  r: real := 3.14;
  o: object;

begin
  o := i; // Упаковка: объект размерного типа integer упаковывается в объект ссылочного типа, 
          // котрый и присваивается переменной o
          // Преобразование типов при упаковке - неявное
  writeln(integer(o)); // Распаковка: из упакованного объекта извлекается значение        
                       // Преобразование типов при распаковке - явное
  o := r;
  writeln(real(o));
  
  try // При неверном преобразовании типов генерируется исключение InvalidCastException
    writeln(shortint(o));
  except
    on e: Exception do
      writeln(e.GetType);
  end;
end.

Ссылки