勉強の過程で、ニック・ホッジズの「CodinginDelphi」の本を使います。私はDelphi2010を使用しています。
匿名メソッドに関する章で、彼は.NETの偽造に関する非常に興味深い例を提供していますusing
。例をコンパイルしようとすると、コンパイラからエラーが発生します。結果を得るために私を助けてください。
私のクラス:
type
TgrsObj = class
class procedure Using<T: class>(O: T; Proc: TProc<T>); static;
end;
implementation
{ TgrsObj }
class procedure TgrsObj.Using<T>(O: T; Proc: TProc<T>);
begin
try
Proc(O);
finally
O.Free;
end;
end;
上記のコードを使用する方法は次のとおりです。
procedure TForm4.Button1Click(Sender: TObject);
begin
TgrsObj.Using(TStringStream.Create,
procedure(ss: TStringStream)
begin
ss.WriteString('test string');
Memo1.Lines.Text := ss.DataString;
end);
end;
コンパイラエラー:
[DCC Error] uMain.pas(36): E2010 Incompatible types: 'TProc<ugrsObj.Using<T>.T>' and 'Procedure'
これは、Delphiの型推論が不十分なためです。実際にT
は最初のパラメーターから推測できますが、残念ながら、コンパイラーは完全に一致する2番目のパラメーターについては満足していません。
次のようにtypeパラメーターを明示的に指定する必要があります。
TgrsObj.Using<TStringStream>(TStringStream.Create, procedure(ss: TStringStream)
begin
ss.WriteString('test string');
Memo1.Lines.Text := ss.DataString;
end);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加