{$mode objfpc} {$h+} {$modeswitch duplicatelocals}
uses
SysUtils;
type
IMyObject = interface
procedure DoSomething;
end ;
TMyObject = class( TInterfacedObject, IMyObject)
name : string ;
constructor Create( const name : string ) ;
destructor Destroy; override ;
procedure DoSomething;
end ;
constructor TMyObject. Create ( const name : string ) ;
begin
inherited Create;
self. name : = name ;
writeln ( 'Объект ' , name , ' создан.' ) ;
end ;
destructor TMyObject. Destroy ;
begin
writeln ( 'Объект ' , name , ' уничтожен.' ) ;
inherited Destroy;
end ;
procedure TMyObject. DoSomething ;
begin
writeln ( 'Объект ' , name , ' работает.' ) ;
end ;
procedure Main;
var
o: IMyObject;
begin
o : = TMyObject. Create ( 'A' ) ;
o. DoSomething ;
o : = TMyObject. Create ( 'B' ) ;
o. DoSomething ;
o : = TMyObject. Create ( 'C' ) ;
raise Exception. Create ( 'Упс.' ) ;
o. DoSomething ;
end ;
begin
try
Main;
except
on e: Exception do writeln ( e. Message ) ;
end ;
end .
eyRtb2RlIG9iamZwY30geyRoK30geyRtb2Rlc3dpdGNoIGR1cGxpY2F0ZWxvY2Fsc30KdXNlcwoJU3lzVXRpbHM7Cgp0eXBlCglJTXlPYmplY3QgPSBpbnRlcmZhY2UKCQlwcm9jZWR1cmUgRG9Tb21ldGhpbmc7CgllbmQ7CgoJVE15T2JqZWN0ID0gY2xhc3MoVEludGVyZmFjZWRPYmplY3QsIElNeU9iamVjdCkKCQluYW1lOiBzdHJpbmc7CgkJY29uc3RydWN0b3IgQ3JlYXRlKGNvbnN0IG5hbWU6IHN0cmluZyk7CgkJZGVzdHJ1Y3RvciBEZXN0cm95OyBvdmVycmlkZTsKCQlwcm9jZWR1cmUgRG9Tb21ldGhpbmc7CgllbmQ7CgoJY29uc3RydWN0b3IgVE15T2JqZWN0LkNyZWF0ZShjb25zdCBuYW1lOiBzdHJpbmcpOwoJYmVnaW4KCQlpbmhlcml0ZWQgQ3JlYXRlOwoJCXNlbGYubmFtZSA6PSBuYW1lOwoJCXdyaXRlbG4oJ9Ce0LHRitC10LrRgiAnLCBuYW1lLCAnINGB0L7Qt9C00LDQvS4nKTsKCWVuZDsKCglkZXN0cnVjdG9yIFRNeU9iamVjdC5EZXN0cm95OwoJYmVnaW4KCQl3cml0ZWxuKCfQntCx0YrQtdC60YIgJywgbmFtZSwgJyDRg9C90LjRh9GC0L7QttC10L0uJyk7CgkJaW5oZXJpdGVkIERlc3Ryb3k7CgllbmQ7CgoJcHJvY2VkdXJlIFRNeU9iamVjdC5Eb1NvbWV0aGluZzsKCWJlZ2luCgkJd3JpdGVsbign0J7QsdGK0LXQutGCICcsIG5hbWUsICcg0YDQsNCx0L7RgtCw0LXRgi4nKTsKCWVuZDsKCglwcm9jZWR1cmUgTWFpbjsKCXZhcgoJCW86IElNeU9iamVjdDsKCWJlZ2luCgkJbyA6PSBUTXlPYmplY3QuQ3JlYXRlKCdBJyk7CgkJby5Eb1NvbWV0aGluZzsKCgkJbyA6PSBUTXlPYmplY3QuQ3JlYXRlKCdCJyk7CgkJby5Eb1NvbWV0aGluZzsKCgkJbyA6PSBUTXlPYmplY3QuQ3JlYXRlKCdDJyk7CgkJcmFpc2UgRXhjZXB0aW9uLkNyZWF0ZSgn0KPQv9GBLicpOwoJCW8uRG9Tb21ldGhpbmc7CgllbmQ7CgpiZWdpbgoJdHJ5CgkJTWFpbjsKCWV4Y2VwdAoJCW9uIGU6IEV4Y2VwdGlvbiBkbyB3cml0ZWxuKGUuTWVzc2FnZSk7CgllbmQ7CmVuZC4=