2012-05-29 10 views
14

Ich habe eine Klasse, die mehrere Dateinamen innerhalb einer TStringList enthält. Ich kann auf einen bestimmten Dateinamen nach Index zugreifen mit:So implementieren Sie die indizierte Standardeigenschaft []

Aber wie kann ich einen Dateinamen mit der folgenden Syntax erhalten?

myclass[index] 

Gibt es eine Eigenschaft, die ich implementieren kann, um diese Funktionalität zu erreichen?

Antwort

25
private 
    function GetColumnValue(const ColumnName: string): string; overload; 
    function GetColumnValue(Index: Integer): string; overload; 
    procedure SetColumnValue(Index: integer; const Value: string); 
public 
    property Values[const ColumnName: string]: string read GetColumnValue; default; 
    property Values[ColumnIndex: integer]: string read GetColumnValue write SetColumnValue; default; 
end; 

Das bedeutet:

  • Sie mehrere default Indexor Eigenschaften
  • die mehrere Indexor Eigenschaften können den gleichen Namen zum Beispiel haben haben, Values
  • die Eigenschaften Getter können Überladungen sein (, d. H. haben den gleichen Namen) z.B., GetColumnValue
  • Delphi wird die Überlastungen nach Typ Unterschrift
+3

Sie benötigen auch 'FilesCount' -Eigenschaft mit' getFilesCount' Methode – teran

+1

@teran je nach Codelogik ist es akzeptabel, leerer Wert für nicht vorhandenen Index zurückzugeben. –

+0

@ EugeneMayevski'EldoSCorp In der Tat habe ich genau das getan, leere Strings übergeben, wenn Index nicht existiert. –

11

Verwenden Sie das Schlüsselwort "default" für die indizierte Eigenschaft. Es kann eine Standardeigenschaft pro Klasse geben.

+1

ein Beispiel – opc0de

+1

Eigentlich wäre sinnvoll zu lösen, ist es möglich, mehrere 'default' Eigenschaften pro Klasse zu haben. [Example Declaration] (http://pastebin.com/tbXS6BXX) – afrazier

+0

@afrazier ist es eine neue Ergänzung der Sprache? Zuvor schien es nur eine Standardeigenschaft zu geben. –

Verwandte Themen