![]() |
Métodos de clase.
¿ Es posible llamar a un método de clase dentro de la misma clase que lo define ?.
Saludos. |
Cita:
A class method can be called through a class reference or an object reference. When it is called through an object reference, the class of the object becomes the value of Self. Por lo tanto, entiendo que sí se puede llamar desde una instancia de una clase (la misma que lo define). Otra cosa es, para qué puedes necesitar una cosa así que no me lo imagino, pero poder creo que se puede. No lo he probado nunca, sólo es una apreciacióonm de lo que leo en la ayuda, para estar 100% seguro habría que intentarlo. |
¿Para qué lo quiero hacer?: para hacer una ¿"chapuza"?.
Pretendo poder llamar a los métodos de clase desde diveros puntos de la apliación sin necesidad de instanciar la clase, pero resulta que en la propia clase es necesario el método que se define como método de clase. Lo adecuado, creo, sería llevar la función que defino como método de clase a otra unit, para poder compartila. Pero quería probar este enfoque. Saludos. Juan P. |
Crea un método A (de clase) y otro B; El método de clase A lo único que debe tener dentro es la llamada a B; Para llamarlo desde Dentro puedes utilizar B, para llamarlo desde fuera puedes utilizar A; De todas maneras no acabo de verlo claro... tal vez estoy "espesito" hoy;) .
|
Cita:
Cita:
Cita:
Cita:
Saludos. |
Cita:
Cita:
Cita:
Así es que si no me funciona lo dejo como está y andando. Saludos. |
No acabo de entender qué significa ésta frase:
"...Lo prohibitivo es llamar a métodos no de clase desde un método de clase" Se puede llamar desde un método definido como class (método de clase) a otros metodos de la misma clase (public o published -incluso privates y protected, aunque no sea recoimendable-) que no estén definidos como métodos de clase (con class); Eso no tiene ningun problema; Revisa el siguiente código: NOTA: Corresponde a un formulario que utiliza un método de clase para crear e inicializarse.
Para llamarlo utilizarías:
...tal vez no he entendido bien la cuestión, si es así pido discupas; P.D: A ésto me refería con crear un método de clase que llama a otros métodos no de clase, de forma que desde fuera se puede llamar a Crear, y desde dentro se puede llamar a Inicializar y LeerDisco. |
Cita:
El ámbito (private, protected, public ... etc), tal como dices, no importa en este asunto, es algo colateral. A todo esto, los constructores son por naturaleza métodos de clase, la misma forma en que creamos objetos así lo indica: MiObjeto := TMiObjeto.Create; // se comporta como un método de clase por lo que dentro de un método de clase se puede llamar perfectamente a Create o a cualquier otro constructor. Lo que sería ilegal es incluir dentro de ese método de clase una llamada directa a un método no de clase, siguiendo tu ejemplo:
La inclusión de una llamada directa a un método no de clase aquí genera el siguiente error en Delphi: "This form of method call only allowed for class methods". Espero haberme explicado ahora mejor, Saludos |
Parte de mi pregunta era si dentro de la propia clase se puede llamar a un método de clase de ella.
Y luego desde otro punto de la apliación (otra unit):
|
Cita:
Métodos regulares pueden llamar directamente a métodos de clase. Métodos de clase pueden llamar directamente a métodos de clase. Métodos de clase no pueden llamar directamente a métodos regulares. Lo que haces en Form2.Crear es correcto ya que estás llamando desde un método de clase, métodos regulares de una instancia de la clase. Lo incorrecto sería que Form2.Crear llamara directamente a TForm2.Inicializar sin crear una instancia de por medio. // Saludos |
Cita:
Jplj: En cuanto al método Suma no acabo de ver la utilidad ni la necesidad de implementarlo como método de una clase (aquí TForm2) y no como función suelta, basta con que lo metas en una unit general a toda tu aplicación (una unit que luego referencies en la cláusula Uses de aquellas units donde quieras usarla). Saludos |
Muchas gracias por vuestras aclaraciones.
PD: Andrés, lo de la suma es sólo un ejemplo. Saludos. |
Cita:
// Saludos |
CReo que este lio tiene nombre de recursividad
Si quiere le mando un componente que lo tiene hecho dice como parametro la clase y ya.
Pero si no me equivoco , creo que los linguajes de programacion lo tienen en su compilador . no tienes que hacer nada solamente de la clase A dentro ponerle la clase A ya definida.(logicamnete este no deve ser el unico codigo, porque quedaria un ciclo sin fin, ) yo lo hice para tener la satisfaccion de ke podia hacerlo. pero el compilador solo te lo hace. Disculpa si tengo falta de ortografia es que soy ukraniano |
En estos momento estoy "actualizando" una aplicación en la que se mantienen durante todo su funcionamiento varias instancias de diferentes clases con el único objetivo de proporcionar acceso a determinadas funciones que implementan. Creo que estas funciones pueden ser candidatas a convertirse en métodos de clase. Aunque también habría que sopesar si realmente son parte inherente de la clase tal como apunta Andrés.
Si finalmente me decido ha hacer el cambio, incluiré en este hilo un ejemplo. PD.: También hay que pensar en el factor t . Esto lo quieren como regalo de Reyes. Saludos |
La franja horaria es GMT +2. Ahora son las 12:56:57. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi