Pergunta

  ShowMessage(TRttiContext.Create.GetType(TStringList)
    .GetProperty('Strings').ToString);

código acima falhar como retornos .GetProperty nil em imóveis como "Strings", "objetos", "Valores" (aqueles com indexadores). Suponho que isso é uma limitação conhecida e a questão é se há alguma maneira de acessar essas propriedades indexadas (de preferência sem voltar aos velhos utils RTTI caindo).

Foi útil?

Solução

propriedades indexadas não tem RTTI, mas os campos subjacentes fazer. Então você pode acessar TStringList.FList diretamente através de RTTI. Tenha cuidado, porém, como isso envolve ponteiros crus, e certifique-se de não ir além da propriedade Count. Você pode fazer coisas semelhantes com outras classes.

Outras dicas

Existem lacunas na RTTI. propriedades indexadas são um.

Mas quando você não obter o nome da propriedade, porque você tentar acessá-los? ;-) Quando você sabe que há tal propriedade um você pode tentar um elenco em seu lugar.

Você não consegue RTTI para parâmetros do método do typ

procedure MyProc(const AParam: array of AType)

também.

Qualquer pessoa saber mais elementos foram não podemos chegar RTTI?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top