2013-06-11 11 views
6

Używam Delphi XE4. Staram się określić jakąś funkcję pomocniczą dla TBytes:Czy mogę zdefiniować pomocnika rekordu dla TB?

TBytesHelper = record helper for TBytes 
public 
    function GetLength: integer; 
end; 

function TBytesHelper.GetLength: integer; 
begin 
    Result := System.Length(Self); 
end; 

Kiedy próbuję zużywają nową funkcję pomocniczą:

var B: TBytes; 
    i: integer; 
begin 
    B := TBytes.Create(1,2,3); 
    i := B.GetLength; 

    if i <> Length(B) then 
    raise Exception.Create('Incorrect result'); 
end; 

I, z wyjątkiem wyniku na i jest 3 ale tak nie jest. Odnoszę się do TStringHelper define w SysUtils.pas, który ma podobny konstrukt.

Czy jest coś, za czym tęsknię?

+0

Ten kod nie będzie nawet kompilowany w XE3. Nie działa z 'B.GetLength' z' [dcc32 Error]: E2018 Wymagany rekord, obiekt lub typ klasy'. Co to jest 'TBytes' w XE4. Czy to nadal 'TArray '? Nie sądziłem, że pomocnicy mogą być używani z typowymi typami. –

+0

Tak. Nie skompiluje się w 'XE3'. Właśnie dlatego używam 'XE4' jak podano w moim pytaniu. –

+0

Oferowałem dodatkowe informacje na wypadek, gdyby okazało się to pomocne. Sądzę, że źle zrozumiałeś mój komentarz. Nieważne. Na marginesie powinieneś tagować pytanie delphi-xe4, a także używać ogólnego tagu dephhi. Jakie dotychczas debugowanie zostało wykonane? –

Odpowiedz

2

Problem ten był omawiany tutaj: https://forums.embarcadero.com/thread.jspa?threadID=88409 W kilku słowach - można określić własny typ i używać go z rekordowym pomocnika:

type 
TMyBytes = array of Byte; 

TBytesHelper = record helper for TMyBytes 
    function GetLength: integer; 
end; 

Ale to nie działa z TBytes określonych w Delphi. Niedawno dodano wsparcie dla typów generycznych, więc prawdopodobnie jest to rodzaj ograniczeń obecnej implementacji.

Powiązane problemy