вторник, 19 августа 2014 г.

Коротко. Про наследование и делегацию

Опять "про скрипты".

Но и не только.

О чём я?

Скажем так - есть класс, который выполняет какой-то функционал и порождает другой класс.

Можно сделать так:

type
 TMyCompiler = class(TCompiler)
  protected
   function CompiledCodeClass: TCompiledCodeClass; override;
 end;//TMyCompiler

 TMyCompiledCode = class(TCompiledCode)
  protected
   procedure DoIt(const aContext: TContext); override;
 end;//TMyCompiledCode
...

function TMyCompiler.CompiledCodeClass: TCompiledCodeClass;
begin
 Result := TMyCompiledCode;
end;

procedure TMyCompiledCode.DoIt(const aContext: TContext);
begin
 // do something with aContext
end;

А можно так (без порождения другого класса):
type
 TCompiledCodeDelegate = procedure (const aContext: TContext) of object;
...
 TMyCompiler = class(TCompiler)
  protected
   function CompiledCodeClassDelegate: TCompiledCodeDelegate;
   class procedure MyDoIt(const aContext: TContext);
 end;//TMyCompiler

...

function TMyCompiler.CompiledCodeClassDelegate: TCompiledCodeDelegate;
begin
 Result := MyDoIt;
end;

class procedure TMyCompiler.MyDoIt(const aContext: TContext);
begin
 // do something with aContext
end;

Мысль понятна?

Комментариев нет:

Отправить комментарий