Si realmente quiere decir que el objeto tiene una propiedad , no se le asigna ningún espacio. Las propiedades son interfaces generalizadas a algún otro modo de acceso, ya sea un campo o una función.
Si la propiedad está respaldada por un campo del objeto, entonces, as Mason explained, el campo existe como parte del objeto en sí; la longitud de la matriz afecta directamente el tamaño total del objeto (como se indica en el método TObject.InstanceSize
). El campo tiene memoria; la propiedad no.
Si la propiedad está respaldada por una función, el valor de retorno de la función generalmente se asigna en la pila del llamante y se pasa como un parámetro "var". La función lo llena y regresa a la persona que llama. De nuevo, la propiedad en sí no tiene memoria asignada.
Puede tener un centenar de propiedades en un objeto que tiene solo cuatro bytes de longitud (que es el tamaño mínimo para los objetos).
Si, sin embargo, en realidad se refería a un campo , entonces se asigna como parte del objeto durante la llamada al TObject.NewInstance
. Ese método se llama como parte del prólogo del constructor externo (a diferencia de cualquier llamada a constructores heredados).
Eso está mal. Todos los * campos * de un objeto se asignarán cuando se cree la instancia. Esto no es necesariamente cierto para una propiedad porque podría tener métodos Getter y Setter que no requieran que se asigne ninguna memoria al momento de la creación de la instancia. – dummzeuch