Sprawdzanie czy obiekt implementuje dany interfejs

Sprawdzanie czy obiekt implementuje dany interfejs
Johny_Morfina
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 5 lat
  • Postów:448
0

Mam kilka klasy dziedziczacych po roznych przodkach, ale poniewaz dzialaja w tym samym srodowisku,
maja sporo wspolnych cech. Wiec kod wyglada tak:

Kopiuj
    for i := 0 to ComponentCount - 1 do begin
      if Components[i] is TKlasaA then
        TKlasaA(Components[i]).doSomethink;
      if Components[i] is TKlasaB then
        TKlasaB(Components[i]).doSomethink;
      if Components[i] is TKlasaC then
        TKlasaC(Components[i]).doSomethink;
      if Components[i] is TKlasaD then
        TKlasaD(Components[i]).doSomethink;
    end;

Zeby moc obslugiwac obie klasy za jednym razem, utworzylem interfejs
zawierajacy wspolne metody i pola.

no i chcialem zrobic cos takiego:

Kopiuj
    for i := 0 to ComponentCount - 1 do
      if Components[i] is IElement then
        IElement(Components[i]).doSomethink;

ale Delphi mowi ze operatora is nie da sie stosowac w takim kontekscie...
jak zatem mam sprawdzic czy jakis obiekt implementuje dany interfejs?


0
Kopiuj
function Supports(const Instance: IInterface; const IID: TGUID; out Intf): Boolean; overload;
function Supports(const Instance: TObject; const IID: TGUID; out Intf): Boolean; overload;
function Supports(const Instance: IInterface; const IID: TGUID): Boolean; overload;
function Supports(const Instance: TObject; const IID: TGUID): Boolean; overload;
function Supports(const AClass: TClass; const IID: TGUID): Boolean; overload;
Johny_Morfina
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 5 lat
  • Postów:448
0

czy duzym nietaktem byloby proszenie o odrobine wyjasnien :>


0

Na przykład tak:

Kopiuj
  if Supports(TwojObiekt, ITwojInterfejs) then ....

lub tak:

Kopiuj
var
  SomeObj: ITwojInterfejs;

{...}

  if Supports(TwojObiekt, ITwojInterfejs, SomeObj) then ....

W tym drugim przypadku masz gotowy do wykorzystania SomeObj.

Johny_Morfina
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 5 lat
  • Postów:448
0

ehh...
na poczatku zrozumialem ze mam sobie napisac taka funkcje:p

akurat w tym przypadku odpowiedz w stylu:
supports+F1
bylaby latwiejsza w zrozumieniu:p

dzieki


Johny_Morfina
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 5 lat
  • Postów:448
0

no dobrze...
tylko <ort>z kad</ort> mam wziac IID mojego interfejsu?


0
Johny_Morfina napisał(a)

no dobrze...
tylko z kad mam wziac IID mojego interfejsu?

Tak jak w podanym przykładzie. If Supports(Components[i], IMyInterface) then....

Tu wpisujesz po prostu interfejs, którego implementację testujesz.

Johny_Morfina
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 5 lat
  • Postów:448
0

no i wszystko gra.

ciekawych rzeczy sie dowiedzialem przy okazji o interfejsach...
przede wszystkim tego ze malo o nich wiem:/

jakby ktos byl ciekawy to znalazlem taka prezentacje


0

Sympatyczne materiały, dzięki za wklejenie linka, na pewno coś dla siebie znajdę :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.