あなたはTSomeThing
とTSomeThingElse
クラスを持っているが、彼らは共通の祖先クラスを持っていない想像してみてください。つまり、それらを同じ関数に渡すことや、共通のメソッドを呼び出すことはできません。両方のクラスに共有インターフェイスを追加することで、両方を行うことができます。例:
type
ISomething = interface
['{EFE0308B-A85D-4DF3-889C-40FBC8FE84D0}']
public
procedure DoSomething;
end;
TSomeThing = class(TSomeVCLObject, ISomething)
...
procedure DoSomething;
end;
TSomeThingElse = class(TSomeOtherVCLObject, ISomething)
...
procedure DoSomething;
end;
procedure TSomeThing.DoSomething;
begin
...
end;
procedure TSomeThingElse.DoSomething;
begin
...
end;
procedure DoSomething(Intf: ISomething);
begin
Intf.DoSomething;
end;
procedure Test;
var
O1: TSomeThing;
O2: TSomeThingElse;
Intf: ISomething;
begin
O1 := TSomeThing.Create(nil);
O2 := TSomeThingElse.Create(nil);
...
if Supports(O1, ISomething, Intf) then
begin
Intf.DoSomething;
DoSomething(Intf);
end;
if Supports(O2, ISomething, Intf) then
begin
Intf.DoSomething;
DoSomething(Intf);
end;
...
O1.Free;
O2.Free;
end;
特定の質問をする必要があります。これは適切に編集しない限り、近い票を集める責任があります。 –
私はそれを削除すべきですか? – ZigiZ
あなたは明確に特定の質問を述べるべきだと思います。これは質問3であり、私はそれらのどれかが異なるとは確信していません。 –