2012-05-29 8 views
14

Tengo una clase que contiene varios nombres de archivo dentro de una TStringList. Puedo acceder a un archivo determinado por el índice usando:Cómo implementar la propiedad predeterminada indexada []

myclass.stringlistclass[index] 

Pero, ¿cómo puedo obtener un nombre de archivo usando la siguiente sintaxis?

myclass[index] 

¿Existe alguna propiedad que pueda implementar para lograr esta funcionalidad?

Respuesta

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; 

Esto significa:

  • se pueden tener varias propiedades default índices de referencia
  • las múltiples propiedades índices de referencia puede tener el mismo nombre, por ejemplo , Values
  • las propiedades getters pueden ser sobrecargas (es decir tienen el mismo nombre) por ejemplo, GetColumnValue
  • Delphi resolver las sobrecargas por tipo de firma
+3

también necesita la propiedad 'FilesCount' con el método' getFilesCount' – teran

+1

@teran, dependiendo de la lógica del código, es aceptable devolver el valor vacío para el índice inexistente. –

+0

@ EugeneMayevski'EldoSCorp Efectivamente, he hecho exactamente esto, pasando cadenas vacías si el índice no existe. –

11

Utilice la palabra clave "predeterminada" en la propiedad indexada. Puede haber una propiedad predeterminada por clase.

+1

un ejemplo sería útil – opc0de

+1

En realidad, es posible tener varias propiedades 'defecto' por clase. [Ejemplo de declaración] (http://pastebin.com/tbXS6BXX) – afrazier

+0

@afrazier ¿Es alguna adición reciente al idioma? Anteriormente, parecía haber solo una propiedad predeterminada. –

Cuestiones relacionadas