J'utilise un enregistrement composé de cordes, de booléens, d'entiers, de devises et de tableaux d'autres enregistrements dans une méthode d'une classe. Je voudrais initialiser récursivement tous les champs d'un type primitif à vide / faux / zéro. Delphi ne semble pas faire cela par défaut. Existe-t-il un moyen simple d'accomplir cela qui n'implique pas d'accéder à chaque champ par nom et le réglage manuellement? P>
3 Réponses :
Vous pouvez utiliser l'un ou l'autre des em> des constructions suivantes (où FOO est un enregistrement). FillChar(Foo, SizeOf(Foo), 0);
ZeroMemory(@Foo, SizeOf(Foo));
Ou le même code avec (probablement) une meilleure lisibilité: Zeromemory (@foo, Tailleof (FOO));
@ IM0RTALITY: J'ai mis à jour la réponse pour inclure votre solution de zéromémorie.
Notez que la zéromémorique est une enveloppe pour Fillchar dans certaines versions i> de Delphi (D6 et 7 au moins).
note, que Vous devez utiliser finaliser avant de remplir ou de zéromémorie dans certains < / em> cas . p>
Eh bien, vous pouvez appliquer un truc juridique simple
Notez que Delphi initialise des types gérés par la vie (chaînes, matrices dynamiques, interfaces).
Dans Delphi-2009 et plus tard, un enregistrement peut être initialisé par
foo: = par défaut (TFOO); code>. Voir La réponse de David à la question Comment bien libérer des enregistrements contenant différents types à Delphi à la fois? .Voir aussi: quelles variables sont initialisées lors de Delphi?