我想這應該是一個容易的因爲我必須做錯了什麼。德爾福IS操作符 - 操作符不適用於此操作數類型
這是我的代碼,我想在Delphi做一個策略模式:
unit Pattern;
interface
type
TContext = class;
IStrategy = interface
function Move(c: TContext): integer;
end;
TStrategy1 = class(TInterfacedObject, IStrategy)
public
function Move(c: TContext): integer;
end;
TStrategy2 = class(TInterfacedObject, IStrategy)
public
function Move(c: TContext): integer;
end;
TContext = class
const
START = 5;
private
FStrategy: IStrategy;
public
FCounter: integer;
constructor Create;
function Algorithm(): integer;
procedure SwitchStrategy();
end;
implementation
{ TStrategy1 }
function TStrategy1.Move(c: TContext): integer;
begin
c.FCounter := c.FCounter + 1;
Result := c.FCounter;
end;
{ TStrategy2 }
function TStrategy2.Move(c: TContext): integer;
begin
c.FCounter := c.FCounter - 1;
Result := c.FCounter;
end;
{ TContext }
function TContext.Algorithm: integer;
begin
Result := FStrategy.Move(Self)
end;
constructor TContext.Create;
begin
FCounter := 5;
FStrategy := TStrategy1.Create();
end;
procedure TContext.SwitchStrategy;
begin
if FStrategy is TStrategy1 then
FStrategy := TStrategy2.Create()
else
FStrategy := TStrategy1.Create();
end;
end.
而且如果FStrategy是TStrategy1則是給我:運營商並不適用於這一運算對象類型。 我在這裏做錯了什麼導致這應該工作,因爲我從很多Delphi語言參考瞭解?
詳細說明,QueryInterface是一個符號快捷方式,它通過其IID標識接口,Craig將其稱爲GUID。通過將光標置於'IStrategy = interface'下的空白行並按下CTRL + SHIFT + G來生成一個。 – 2011-03-24 16:17:21
@David,這都是正確的,但即使這樣也不會使他的代碼工作,因爲IID/GUID不匹配類型引用。 – 2011-03-24 16:18:34
@Craig從D2010開始,您可以從Delphi界面中恢復實現對象。 – 2011-03-24 17:19:16