2

現時点では、delphi2010を試してみて、RttiユニットのTValueタイプを見つけました。TValueには非常に興味深い機能がありますが、インターフェイスを割り当てる方法が見つかりません。

私は次のことを試みます

program Project1;
uses
  Classes, SysUtils, Rtti;
var
   list : IInterfaceList;
   value : TValue;
begin
  // all these assignments works
  value := 1;
  value := 'Hello';
  value := TObject.Create;

  // but nothing of these assignments works
  list := TInterfaceList.Create;
  value := list; // [DCC Fehler] Project1.dpr(15): E2010 incompatible types: 'TValue' and 'IInterfaceList'
  value.From[list]; // [DCC Fehler] Project1.dpr(16): E2531 Method 'From' requires explicit typarguments
  value.From<IInterfaceList>[list]; // [DCC Fehler] Project1.dpr(17): E2035 Not enough parameters
end.

これ以上の情報は見つかりません。デルファイヘルプシステムにもインターネットにもありません。私は何を間違えますか?

4

2 に答える 2

7

あなたの最後の試みが最も近いです。TValue.Fromは、パラメーターからTValueを作成するクラス関数です。CodeInsightがそれを示したので、おそらく角かっこをそこに入れますよね?これは実際にはCodeInsightの不具合です。ジェネリックベースの関数の場合は、代わりに括弧を使用する必要があります。適切な構文は次のようになります。

Value := TValue.From<IInterfaceList>(list);
于 2009-09-06T16:39:12.323 に答える
7

これは、プログラムの動作バージョンです。

program Project1;
uses
  Classes, SysUtils, Rtti;
var
   list : IInterfaceList;
   value : TValue;
begin
  // all these assignments works
  value := 1;
  value := 'Hello';
  value := TObject.Create;

  // but nothing of these assignments works
  list := TInterfaceList.Create;
  value := TValue.From(list);
end.
于 2009-09-06T17:02:43.587 に答える