playing problemas com propriedades indexadas via nova RTTI [D2010]
-
18-09-2019 - |
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).
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?