program ideone;
{$MODE OBJFPC}{$H+}
uses
TypInfo;
type
TUser = class(TObject)
private
FUserName: AnsiString;
FLanguage: AnsiString;
protected
function GetPropValue(APropName: AnsiString): AnsiString;
procedure SetPropValue(APropName, AValue: AnsiString);
public
constructor Create();
procedure ShowUserInfo();
public
property Prop[AName: AnsiString]: AnsiString read GetPropValue write SetPropValue; default;
published
property UserName: AnsiString read FUserName write FUserName;
property Language: AnsiString read FLanguage write FLanguage;
end;
constructor TUser.Create();
begin
inherited Create();
FUserName := '';
FLanguage := '';
end;
function TUser.GetPropValue(APropName: AnsiString): AnsiString;
var
piProp: PPropInfo;
begin
piProp := GetPropInfo(Self, APropName);
if Assigned(piProp) then
Result := GetStrProp(Self, piProp);
end;
procedure TUser.SetPropValue(APropName, AValue: AnsiString);
var
piProp: PPropInfo;
begin
piProp := GetPropInfo(Self, APropName);
if Assigned(piProp) then
SetStrProp(Self, piProp, AValue);
end;
procedure TUser.ShowUserInfo();
begin
WriteLn(FUserName, #10, FLanguage, #10);
end;
var
usrFurious: TUser;
begin
usrFurious := TUser.Create();
try
{ modyfikacja przez poszczególne właściwości }
usrFurious.UserName := 'Furious';
usrFurious.Language := 'Object';
usrFurious.ShowUserInfo();
{ modyfikacja przez zbiorczą właściwość }
usrFurious['UserName'] := 'Programming';
usrFurious['Language'] := 'Pascal';
usrFurious.ShowUserInfo();
finally
usrFurious.Free();
end;
end.
cHJvZ3JhbSBpZGVvbmU7Cgp7JE1PREUgT0JKRlBDfXskSCt9Cgp1c2VzCiAgVHlwSW5mbzsKCnR5cGUKICBUVXNlciA9IGNsYXNzKFRPYmplY3QpCiAgcHJpdmF0ZQogICAgRlVzZXJOYW1lOiBBbnNpU3RyaW5nOwogICAgRkxhbmd1YWdlOiBBbnNpU3RyaW5nOwogIHByb3RlY3RlZAogICAgZnVuY3Rpb24gR2V0UHJvcFZhbHVlKEFQcm9wTmFtZTogQW5zaVN0cmluZyk6IEFuc2lTdHJpbmc7CiAgICBwcm9jZWR1cmUgU2V0UHJvcFZhbHVlKEFQcm9wTmFtZSwgQVZhbHVlOiBBbnNpU3RyaW5nKTsKICBwdWJsaWMKICAgIGNvbnN0cnVjdG9yIENyZWF0ZSgpOwogICAgcHJvY2VkdXJlIFNob3dVc2VySW5mbygpOwogIHB1YmxpYwogICAgcHJvcGVydHkgUHJvcFtBTmFtZTogQW5zaVN0cmluZ106IEFuc2lTdHJpbmcgcmVhZCBHZXRQcm9wVmFsdWUgd3JpdGUgU2V0UHJvcFZhbHVlOyBkZWZhdWx0OwogIHB1Ymxpc2hlZAogICAgcHJvcGVydHkgVXNlck5hbWU6IEFuc2lTdHJpbmcgcmVhZCBGVXNlck5hbWUgd3JpdGUgRlVzZXJOYW1lOwogICAgcHJvcGVydHkgTGFuZ3VhZ2U6IEFuc2lTdHJpbmcgcmVhZCBGTGFuZ3VhZ2Ugd3JpdGUgRkxhbmd1YWdlOwogIGVuZDsKCiAgY29uc3RydWN0b3IgVFVzZXIuQ3JlYXRlKCk7CiAgYmVnaW4KICAgIGluaGVyaXRlZCBDcmVhdGUoKTsKICAgIEZVc2VyTmFtZSA6PSAnJzsKICAgIEZMYW5ndWFnZSA6PSAnJzsKICBlbmQ7CgogIGZ1bmN0aW9uIFRVc2VyLkdldFByb3BWYWx1ZShBUHJvcE5hbWU6IEFuc2lTdHJpbmcpOiBBbnNpU3RyaW5nOwogIHZhcgogICAgcGlQcm9wOiBQUHJvcEluZm87CiAgYmVnaW4KICAgIHBpUHJvcCA6PSBHZXRQcm9wSW5mbyhTZWxmLCBBUHJvcE5hbWUpOwoKICAgIGlmIEFzc2lnbmVkKHBpUHJvcCkgdGhlbgogICAgICBSZXN1bHQgOj0gR2V0U3RyUHJvcChTZWxmLCBwaVByb3ApOwogIGVuZDsKCiAgcHJvY2VkdXJlIFRVc2VyLlNldFByb3BWYWx1ZShBUHJvcE5hbWUsIEFWYWx1ZTogQW5zaVN0cmluZyk7CiAgdmFyCiAgICBwaVByb3A6IFBQcm9wSW5mbzsKICBiZWdpbgogICAgcGlQcm9wIDo9IEdldFByb3BJbmZvKFNlbGYsIEFQcm9wTmFtZSk7CgogICAgaWYgQXNzaWduZWQocGlQcm9wKSB0aGVuCiAgICAgIFNldFN0clByb3AoU2VsZiwgcGlQcm9wLCBBVmFsdWUpOwogIGVuZDsKCiAgcHJvY2VkdXJlIFRVc2VyLlNob3dVc2VySW5mbygpOwogIGJlZ2luCiAgICBXcml0ZUxuKEZVc2VyTmFtZSwgIzEwLCBGTGFuZ3VhZ2UsICMxMCk7CiAgZW5kOwoKdmFyCiAgdXNyRnVyaW91czogVFVzZXI7CmJlZ2luCiAgdXNyRnVyaW91cyA6PSBUVXNlci5DcmVhdGUoKTsKICB0cnkKICAgIHsgbW9keWZpa2FjamEgcHJ6ZXogcG9zemN6ZWfDs2xuZSB3xYJhxZtjaXdvxZtjaSB9CiAgICB1c3JGdXJpb3VzLlVzZXJOYW1lIDo9ICdGdXJpb3VzJzsKICAgIHVzckZ1cmlvdXMuTGFuZ3VhZ2UgOj0gJ09iamVjdCc7CiAgICB1c3JGdXJpb3VzLlNob3dVc2VySW5mbygpOwoKICAgIHsgbW9keWZpa2FjamEgcHJ6ZXogemJpb3JjesSFIHfFgmHFm2Npd2/Fm8SHIH0KICAgIHVzckZ1cmlvdXNbJ1VzZXJOYW1lJ10gOj0gJ1Byb2dyYW1taW5nJzsKICAgIHVzckZ1cmlvdXNbJ0xhbmd1YWdlJ10gOj0gJ1Bhc2NhbCc7CiAgICB1c3JGdXJpb3VzLlNob3dVc2VySW5mbygpOwogIGZpbmFsbHkKICAgIHVzckZ1cmlvdXMuRnJlZSgpOwogIGVuZDsKZW5kLgo=