2010-12-22 6 views
0

ich ein Objekt wie dieses:Wie TObjectDictionary.Values ​​als Eigenschaft zugänglich machen?

TMyObj = class 
    private 
    FObjList: TObjectDictionary <integer, TMyObject>; 
    public 
    constructor Create; 
    destructor Destroy; 
    // How to access Values correctly? Something similar to this not working code 
    property Values: TValueCollection read FObjList.Values write FObjList.Values; 
    end; 

    var MyObj: TMyObj; 

Um die Werte von FObjList zugreifen, würde ich gerne schreiben:

for tmpObject in MyObj.Values do 
... 

Wie muss ich die Eigenschaft „Werte“ erklären, so dass MyObj.Values ​​verhält sich genau so, als würde ich auf MyObj.FObjList.Values ​​zugreifen?

Antwort

3
/// Interface 

    TMyDictionary = TObjectDictionary <integer, TMyObject>; 
    TMyValueCollection = TDictionary<integer,TMyObject>.TValueCollection; 

    TMyObj = class 
    private 
    FObjList: TMyDictionary; 
    function GetValues: TMyValueCollection; 
    public 
    constructor Create; 
    destructor Destroy; override; 
    property Values: TMyValueCollection read GetValues; 
    end; 


/// Implementation 


constructor TMyObj.Create; 
begin 
    inherited; 
    FObjList := TMyDictionary.Create; 
end; 

destructor TMyObj.Destroy; 
begin 
    FObjList.Free; 
    inherited; 
end; 

function TMyObj.GetValues: TMyValueCollection; 
begin 
    Result := FObjList.Values; 
end; 
+0

Danke, genau was ich brauche! – Holgerwa

1

TValueCollection ist eine verschachtelte Klasse von TDictionary und muss qualifiziert werden. Und Sie geben besser eine Getter-Methode für Werte an.

type 
    TMyObjectDictionary = TObjectDictionary <integer, TMyObject>; 

    TMyObj = class 
    private 
    FObjList: TMyObjectDictionary; 
    function GetValues: TMyObjectDictionary.TValueCollection; 
    public 
    property Values: TMyObjectDictionary.TValueCollection read GetValues; 
    end; 

function TMyObj.GetValues: TMyObjectDictionary.TValueCollection; 
begin 
    Result := FObjList.Values; 
end; 

Bearbeiten: Ups! Zu spät ... Aber etwas anders.

Verwandte Themen