귀하는 손님 이십니다
로그인
회원가입
  
  델마당 공식 은행계좌
  하나은행 227-910235-83607
  예금주 이상국(운영진)
프로젝트 게시판
투표게시판
델마당소개
기초부터 활용까지! 델파이 교육 - 데브기어
강좌, 팁, 정보 강좌, 팁, 정보 입니다.
글내용 - 강좌, 팁, 정보
 익명 메소드의 로컬 변수 캡처기능을 응용한 Guard함수
채팅
(현주용)
2019-08-16 오전 5:19:26
카테고리: 팁
2015회 조회



등록된 파일이 없습니다.

지금 사용중인 익명메소드를 사용한 Guard함수(try..finally 대용)을 적습니다. 제가 가진 소스는 다른 것과 연계된 것이 많아 아래 다른 분의 소스를 간단하게 수정하여 적습니다.

기존의 Guard는 고정된 형태의 메소드 형태만 가능하지만 익명함수를 사용하면 제한이 사라집니다.

=== 사용 예 -====

var stream: TStream;

ds: TxxConnect;

begin

stream := TMemoryStream.Create;

Screen.Cursor := crHourglass;

ds := TxxConnect.Create;

//Finally블럭에서 사용하는 구문 전체를 적으면 됩니다.

Guard( procedure begin

     stream.Free;

     Screen.Cursor := crDefault;

     if (ds.Connected) then ds.Disconnect;

     ds.Free; 

    end;);

ds.Connect;

.....

 

 

=====  함수 소스 ====

TProc = reference to procedure ; //익명함수

function Guard(event : TProc): IUnknown; overload;



implementation

type

TFinalObject = class(TInterfacedObject)
private
FProc : TProc;
public
constructor Create(Instance: TProc); overload;

destructor Destroy; override;

end;

 

constructor TFinalObject.Create(Instance: TProc);

begin

Fproc := Instance;
end;

 

destructor TFinalObject.Destroy;

begin

  if Assigned(FProc) then FProc;
  inherited;

end;

function Guard(event : TProc): IUnknown; overload;

begin

  Result := TFinalObject.Create(event);

end;