-
Всем доброго времени суток.
Можно ли, и если да, то как создать свой тип данных с проверкой (к примеру по маске).
Какая собственно цель: автоматически обрабатывать переменную, которая должна принимать GUID в виде строки. Так как подобных переменных в разных классах много, то не хотелось бы для каждого класса писать обработчик.
Может кто сталкивался с подобным? Или знает направление куда копать? Заранее благодарен.
Rad XE2, windows 7
-
Так как подобных переменных в разных классах много, то не хотелось бы для каждого класса писать обработчик.
в чем нужда писать для каждого? напиши один.
-
Сделать базовый класс и наследоваться от него это понятно, но хотелось бы более гибкого решения. Примерно как у базовых типов. Т.е. как если бы переменной типа integer присвоить строковое значение.
-
какой класс?
стандалон функция в библиотечном модуле.
-
А по подробнее если не сложно? Видимо пора отдыхать, тупить уже начинаю
-
> то как создать свой тип данных
А разве это возможно? Типы данных, имхо, все уже созданы.
> Примерно как у базовых типов. Т.е. как если бы переменной > типа integer присвоить строковое значение.
> А по подробнее если не сложно? > Видимо пора отдыхать, тупить уже начинаю
-
Хелпер наверное еще можно. А что сделать надо? )
-
> Т.е. как если бы переменной типа integer присвоить строковое значение.http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Operator_Overloading_(Delphi) type TMyVar = record private Id: TGUID; public procedure Init; class operator Implicit(a: TMyVar): String; class operator Implicit(s: String): TMyVar; class operator Equal(a, b: TMyVar): Boolean; class operator Explicit(s: String): TMyVar; class operator Explicit(a: TMyVar): String; end;
{ TMyVar }
class operator TMyVar.Equal(a, b: TMyVar): Boolean; begin Result := ( a.Id = b.Id ); end;
class operator TMyVar.Explicit(a: TMyVar): String; begin Result := GUIDToString(a.Id); end;
class operator TMyVar.Explicit(s: String): TMyVar; begin Result.Id := StringToGUID(s); end;
class operator TMyVar.Implicit(s: String): TMyVar; begin Result.Id := StringToGUID(s); end;
class operator TMyVar.Implicit(a: TMyVar): String; begin Result := GUIDToString(a.Id); end;
procedure TMyVar.Init; begin CreateGUID(Id); end;
var t: TMyVar; s: string;
begin t.Init;
s := t;
s[low(s)+1] := '0'; s[high(s)-1]:= '0';
t := s;
if ( t = TMyVar(s) ) then Writeln(String(t));
end.
-
> manaka © (06.04.17 20:34) [5] > > > > то как создать свой тип данных > > > А разве это возможно? > Типы данных, имхо, все уже созданы.
Буквально по азбуке, конечно нельзя. Все типы зашиты в компилятор. Но классы то есть. И никто никому не мешает создать свой класс со свойствами чтения и записи так, что в пользовательском коде это будет не отличимо от обычной переменной.
-
Всем премного благодарен, особенно NoUser © - это то что нужно!
|