在Delphi中将函数调用进行通用包装

3

我在一个类中有不同的函数被调用。现在我想以通用方式实现自定义全局错误管理。

我的函数有:

function TTestClass.DoWorkA(parameter : String): boolean;
begin
  try
    result := internalClass.DoWorkA(parameter);
  except
    DoStuff();
  end;
end;

function TTestClass.DoWorkB(): String;
begin
  try
    result := internalClass.DoWorkB();
  except
    DoStuff();
  end;
end;

我需要在每个方法中插入try except块。这个块不改变,始终保持相同。现在我想以通用的方式解决这个问题(伪代码):

function TTestClass.DoWorkA(parameter : String): boolean;
begin
   result := DoWork<boolean>(internalClass.DoWorkA,parameter);
end;

function TTestClass.DoWorkB(): String;
begin
  result := DoWork<string>(internalClass.DoWorkB);
end;

function TTestClass.DoWork<T>(function : TFunction;parameter : TParameters): T;
begin
  try
     result := Call(function,parameter);
  except
    DoStuff();
  end;


end;

我脑海中有这样的想法,但是我没有找到用这段代码解决它的方法。

在Delphi中有没有实现这样的方法的方式?

1个回答

4
您可以使用泛型和匿名方法来完成此操作:
function TTestClass.DoWork<T>(Func: TFunc<T>): T;
begin
  try
    result := Func();
  except
    DoStuff();
  end;
end;

您可以轻松地像这样调用它:
function TTestClass.DoWorkA(parameter : String): boolean;
begin
  result := DoWork<boolean>(
    function: Boolean
    begin
      Result := internalClass.DoWorkA(parameter);
    end;
  );
end;

你忘了展示如何使用匿名函数作为输入调用DoWork() - Remy Lebeau
我通常不使用“酷”的词语,所以只能用“精湛”的词来形容。 - MartynA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接