我在一个被调用的类中有不同的函数。现在我想以通用方式实现自定义全局错误管理。
我的职能是:
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中实现这样的东西?
答案 0 :(得分: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;