2013-07-29 13 views
7

Per ragioni di compatibilità (oggetti vengono serializzati e esportato e deve corrispondere nomi esterni) Vorrei avere un nome di campo essendo 'tipo', cioèÈ possibile utilizzare parole riservate per i nomi dei campi?

TTBaseWebResponse = class 
private 
    type: String; 
    success: Integer;  
end; 

or 

TTBaseWebResponse = class 
private 
    ftype: String; 
    fsuccess: Integer;  
public 
    type: string read fstring write fstring; 
    success: integer read fsuccess write fsuccess; 
end; 

Delphi (XE2) non anche compilare questo. È possibile? Come?

+4

Solo se [ 'uso e char prima della sua name' ] (http://stackoverflow.com/a/6063439/960757) ... – TLama

risposta

6

Provare a utilizzare & prima del nome del campo

+2

La magia di questo è che RTTI sembra conoscere questo campo come 'tipo' (senza la e commerciale) 'fino in fondo'. Sto usando TSuperRttiContext di SuperObjects per serializzare l'oggetto e l'output JSON è: {"successo": 1, "tipo": "TTBaseWebResponse"} senza la e commerciale - proprio come lo voglio io. –

+4

Questo perché il suo nome * è * 'tipo' senza la e commerciale. La e commerciale è semplicemente un carattere di escape per il parser. Quando non si analizza, non è necessario sfuggire a nulla. Quando fai riferimento al campo altrove nel tuo codice, puoi evitare la e commerciale qualificando completamente il nome. Ad esempio, 'Response.type'. –

5

Sì, è necessario utilizzare & prima del nome;

TTBaseWebResponse = class 
private 
    &type: String; 
    success: Integer;  
end; 
5

Questo è coperto dai documentation:

identificatori estese

Potreste incontrare identificatori (ad esempio tipi, o metodi in una classe) aventi lo stesso nome di un Delphi lingua riservata. Ad esempio, una classe potrebbe avere un metodo chiamato begin. Le parole riservate Delphi come come begin non possono essere utilizzate per un nome identificativo.

Se si qualifica completamente l'identificatore, non ci sono problemi. Ad esempio, se si desidera utilizzare la Delphi parola riservata tipo per un nome identificatore, è necessario utilizzare il suo nome completo:

var TMyType.type 
// Using a fully qualified name avoids ambiguity with Delphi language keyword. 

Come alternativa più breve, la e commerciale (&) Operatore può essere utilizzato per risolvere le ambiguità tra identificatori e linguaggio Delphi parole riservate. & impedisce l'analisi di una parola chiave come parola chiave (ovvero una parola riservata). Se si incontra un metodo o si digita lo con lo stesso nome di una parola chiave Delphi, è possibile omettere la specifica dello spazio dei nomi se si esegue il prefisso del nome dell'identificatore con una e commerciale. Ma quando si è dichiarando un identificatore che ha lo stesso nome di un parola chiave, è necessario utilizzare il &:

type 
    &Type = Integer; 
    // Prefix with '&' is ok. 
+0

Sembra che questo non possa essere usato in Delphi 7? – SOUser

Problemi correlati