(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Введение в TValue

Источник: delphi2010

TValue - новая структура - запись (record), определенная в RTTI.pas, она предоставляет возможность сохранять значение и информацию о типе для экземпляров любых типов. Это видно из приведенного ниже кода.Например, в следующей программе, вы можете видеть, что значение свойства TypeInfo TValue - соответствует тому, что возвращает функция TypeInfo() для этого типа.

program Project10;
{$APPTYPE CONSOLE}

uses
  SysUtils, Rtti;

var
 v : TValue;
 i : Integer;

begin
  i := 10;
  v := I;
  Writeln('Address of TypeInfo on TValue :', IntToStr(Integer(v.TypeInfo)));
  Writeln('Address of TypeInfo on Integer:', IntToStr(Integer(TypeInfo(Integer))));
  Writeln('Value of I:',I);
  Writeln('Value of V:',v.AsInteger);
  readln;
end.

Результат:

Address of TypeInfo on TValue :4198560
Address of TypeInfo on Integer:4198560
Value of I:10
Value of V:10

Есть несколько Implicit операторов, которые позволяют легко определить назначенные  типы. Если у вас тип, который не попадает в этот список, не волнуйтесь, есть способ обойти это, этому вопросу я хочу посвятить отдельный пост.

class operator Implicit(const Value: string): TValue;
class operator Implicit(Value: Integer): TValue;
class operator Implicit(Value: Extended): TValue;
class operator Implicit(Value: Int64): TValue;
class operator Implicit(Value: TObject): TValue;
class operator Implicit(Value: TClass): TValue;
class operator Implicit(Value: Boolean): TValue;

Для извлечения данных существует набор согласующих функций.

function AsString: string;
function AsInteger: Integer;
function AsExtended: Extended;
function AsInt64: Int64;
function AsObject: TObject;
function AsClass: TClass;
function AsBoolean: Boolean;

Хотя это может навести вас на мысли о типе Variant, преобразование одного типа к другому не происходит автоматически.
Следующий код сгенерирует исключение EInvalidCast, потому как тип integer не является строкой.

 
program Project10;
{$APPTYPE CONSOLE}

uses
  Rtti;

var
 v : TValue;
 i : Integer;

begin
  i := 10;
  v := I;
  // Generates and Invalid Type Cast
  Writeln('Value of V:',v.asString);
  readln;
end.

Для того, что бы помочь вам определить, какой тип задан в TValue, у вас есть несколько свойств и функций.

 
// in TypInfo.pas
TTypeKind = (tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat,
   tkString, tkSet, tkClass, tkMethod, tkWChar, tkLString, tkWString,
   tkVariant, tkArray, tkRecord, tkInterface, tkInt64, tkDynArray, tkUString,
   tkClassRef, tkPointer, tkProcedure);

// part of TValue in rtti.pas
property Kind: TTypeKind
function IsObject: Boolean;
function IsType<T>: Boolean; overload;

Следующий код демонстрирует, как использовать все это.

 
program Project10;
{$APPTYPE CONSOLE}

uses
  Rtti,TypInfo;

var
 v : TValue;
 i : Integer;

begin
  i := 10;
  v := I;
  Writeln('V.Kind =',GetEnumName(TypeInfo(TTypeKind),ord(v.Kind)));
  Writeln('V.IsType<Integer> = ',v.IsType<Integer>);
  Writeln('V.IsType<TObject> = ',v.IsType<TObject>);
  Writeln('V.IsObject = ',v.IsObject);
  readln;
end.

Результат.

 
V.Kind =tkInteger
V.IsType<Integer> = TRUE
V.IsType<TObject> = FALSE
V.IsObject = FALSE

TValue обладает достаточно более широким функционалом, который можно исследовать, чему я посвящу отдельную статью позднее, здесь же приведены необходимые основы для того, что бы в следующей статье перейти к TRttiMember для свойств и полей.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 16.11.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Enterprise Connectors (1 Year term)
Delphi Professional Named User
Business Studio 4.2 Enterprise. Конкурентная лицензия + Business Studio Portal 4.2. Пользовательская именная лицензия.
TeeChart for .NET Standard Business Edition 2017 single license
Quest Software. Toad for SQL Server Development Suite
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
eManual - электронные книги и техническая документация
Мастерская программиста
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100