Опять ничего анализировать или "разжёвывать" не буду.
Просто приведу код:
Ни на что "не претендую"...
Просто "заметки на полях"...
Просто тут есть момент "задуматься" - когда использовать интерфейсы, а когда - нет.
"Примерно" то же относится и к виртуальным методам.
Ну и ещё.. Не надо забывать про паттерн 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)
Комментариев нет:
Отправить комментарий