Опять ничего анализировать или "разжёвывать" не буду.
Просто приведу код:
Ни на что "не претендую"...
Просто "заметки на полях"...
Просто тут есть момент "задуматься" - когда использовать интерфейсы, а когда - нет.
"Примерно" то же относится и к виртуальным методам.
Ну и ещё.. Не надо забывать про паттерн null-object - http://ru.wikipedia.org/wiki/Null_object_(%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
Просто приведу код:
type
ISomeInterface = interface
procedure SomeMethod;
end;//ISomeInterface
TSomeClass = class(TInterfacedObject, ISomeInterface)
public
procedure SomeMethod;
end;//TSomeClass
...
procedure TSomeClass.SomeMethod;
begin
if (Self = nil) then
Write('nil')
else
Write(ClassName);
end;
...
var
l_Nil : TSomeClass;
l_NotNil : TSomeClass;
begin
l_Nil := nil;
l_Nil.SomeMethod; // - в выводе - nil
ISomeInterface(l_Nil).SomeMethod; // AV
l_NotNil := TSomeClass.Create;
l_NotNil.SomeMethod; // - в выводе - TSomeClass
ISomeInterface(l_NotNil).SomeMethod; // - в выводе - TSomeClass
end;
Ни на что "не претендую"...
Просто "заметки на полях"...
Просто тут есть момент "задуматься" - когда использовать интерфейсы, а когда - нет.
"Примерно" то же относится и к виртуальным методам.
Ну и ещё.. Не надо забывать про паттерн null-object - http://ru.wikipedia.org/wiki/Null_object_(%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
Комментариев нет:
Отправить комментарий