Pasar una clase variable

03/10/2004 - 01:51 por smeagol | Informe spam
Imaginen tener una clase llamada server que necesita acceder a la clase
parent (llamada "client" aqui), pero la clase "client" puede llamarse
"pirulo", como puedo acceder desde la clase "server" a un metodo de la clase
"pirulo" o "pirulos" (que obviamente tendria el metodo a llamar desde
server)
El tema es que tambien necesita declarar esta clase variable en el
constructo.

public class client : Windows.Forms.Form {
public client{ new server(this); }
public Write { System.Console.Write("HI"); }
}

public class server {
public client cl;

public server (client cl) { cl.Write(); }
// public server (can_be_any_name cl) { cl.Write(); }
}

Preguntas similare

Leer las respuestas

#1 A.Poblacion
03/10/2004 - 11:51 | Informe spam
Tendrías que declarar un interface y hacer que todos tus client implementen
ese interface. En el constructor de server, recibes un objecto del tipo del
interface y llamas al método deseado a través de dicho interface. Más o
menos algo asi:

public interface ICliente
{
void Write();
}
public class client : Windows.Forms.Form, ICliente {
public client{ new server(this); }
public void Write() { System.Console.Write("HI"); }
}
public class server {
public server (ICliente cl) { cl.Write(); }
}


"smeagol" <pedorro77.hotmail.com> wrote in message
news:eot8$
Imaginen tener una clase llamada server que necesita acceder a la clase
parent (llamada "client" aqui), pero la clase "client" puede llamarse
"pirulo", como puedo acceder desde la clase "server" a un metodo de la


clase
"pirulo" o "pirulos" (que obviamente tendria el metodo a llamar desde
server)
El tema es que tambien necesita declarar esta clase variable en el
constructo.

public class client : Windows.Forms.Form {
public client{ new server(this); }
public Write { System.Console.Write("HI"); }
}

public class server {
public client cl;

public server (client cl) { cl.Write(); }
// public server (can_be_any_name cl) { cl.Write(); }
}


Respuesta Responder a este mensaje
#2 Octavio Hernandez
03/10/2004 - 12:22 | Informe spam
Smeagol,

a) La herencia y el polimorfismo son la solución para eso.
Si quieres poder pasar al servidor objetos de las clases 'ClienteA',
'ClienteB' y 'ClienteC', diseña estas clases de forma tal que todas hereden
de una clase 'ClienteBase' y redefinan los métodos virtuales definidos en
esta. Al programar tu servidor, utiliza:

public Server (ClienteBase cl)
{
}

A ese constructor podrás pasarle objetos de las clases A, B o C, según te
convenga.

b) Las interfaces se pueden utilizar también con ese mismo fin.
c) Si las clases que quieres pasar no están hechas por tí, no satisfacen una
jerarquía o interfaz común, o sería demasiado trabajo modificarlas, en
último caso todos heredan de object - puedes utilizar object como tipo
"declarado" de esa variable. Claro, luego tendrás que estar haciendo
'castings' a esa variable para acceder a sus propiedades, métodos, etc.

Slds,

Octavio

"smeagol" <pedorro77.hotmail.com> escribió en el mensaje
news:eot8$
Imaginen tener una clase llamada server que necesita acceder a la clase
parent (llamada "client" aqui), pero la clase "client" puede llamarse
"pirulo", como puedo acceder desde la clase "server" a un metodo de la


clase
"pirulo" o "pirulos" (que obviamente tendria el metodo a llamar desde
server)
El tema es que tambien necesita declarar esta clase variable en el
constructo.

public class client : Windows.Forms.Form {
public client{ new server(this); }
public Write { System.Console.Write("HI"); }
}

public class server {
public client cl;

public server (client cl) { cl.Write(); }
// public server (can_be_any_name cl) { cl.Write(); }
}


Respuesta Responder a este mensaje
#3 smeagol
08/10/2004 - 02:32 | Informe spam
Si las clases que quieres pasar no están hechas por tí




ese es el caso. el programador deberia tener la libertad de usar cualquier
nombre para su clase.
Solo deberia pasar la clase al motor "server", el cual se encargaria de un
monton de cosas algo asi como

Server server = new Server(this); // this es la clase llamada "pirulo"

pero otro ejemplo podria ser

Server server = new Server(this); // this es la clase llamada "pirulete"

El tema es que "Server" agregaria un Control a "pirulete"

//parent = pirulete o pirulo
this.parent.Controls.Add(this.MyControl);

En este caso dentro de server parent deberia estar en el constructor
algo asi como

//
Pirulo parent;
o
Pirulete parent;

public class Server() {...}
//
Alguna vez by algo de Type pero no recuerdo en donde y si es util para el
caso

"Octavio Hernandez" escribió en el mensaje
news:%
Smeagol,

a) La herencia y el polimorfismo son la solución para eso.
Si quieres poder pasar al servidor objetos de las clases 'ClienteA',
'ClienteB' y 'ClienteC', diseña estas clases de forma tal que todas
hereden
de una clase 'ClienteBase' y redefinan los métodos virtuales definidos en
esta. Al programar tu servidor, utiliza:

public Server (ClienteBase cl)
{
}

A ese constructor podrás pasarle objetos de las clases A, B o C, según te
convenga.

b) Las interfaces se pueden utilizar también con ese mismo fin.
c) Si las clases que quieres pasar no están hechas por tí, no satisfacen
una
jerarquía o interfaz común, o sería demasiado trabajo modificarlas, en
último caso todos heredan de object - puedes utilizar object como tipo
"declarado" de esa variable. Claro, luego tendrás que estar haciendo
'castings' a esa variable para acceder a sus propiedades, métodos, etc.

Slds,

Octavio

"smeagol" <pedorro77.hotmail.com> escribió en el mensaje
news:eot8$
Imaginen tener una clase llamada server que necesita acceder a la clase
parent (llamada "client" aqui), pero la clase "client" puede llamarse
"pirulo", como puedo acceder desde la clase "server" a un metodo de la


clase
"pirulo" o "pirulos" (que obviamente tendria el metodo a llamar desde
server)
El tema es que tambien necesita declarar esta clase variable en el
constructo.

public class client : Windows.Forms.Form {
public client{ new server(this); }
public Write { System.Console.Write("HI"); }
}

public class server {
public client cl;

public server (client cl) { cl.Write(); }
// public server (can_be_any_name cl) { cl.Write(); }
}






Respuesta Responder a este mensaje
#4 Octavio Hernandez
09/10/2004 - 01:16 | Informe spam
smeagol,

"pirulo" y "pirulete" no son cualquier cosa, sino clases herederas de Form,
no? ¿o de Control?
Si declaras el parámetro del constructor de Server como Form, por ejemplo,
podrás aplicarle 'Parent' sin necesidad de reflexión ni nada por el estilo.

Slds - Octavio

"smeagol" <pedorro77.hotmail.com> escribió en el mensaje
news:
>> Si las clases que quieres pasar no están hechas por tí
ese es el caso. el programador deberia tener la libertad de usar cualquier
nombre para su clase.
Solo deberia pasar la clase al motor "server", el cual se encargaria de un
monton de cosas algo asi como

Server server = new Server(this); // this es la clase llamada "pirulo"

pero otro ejemplo podria ser

Server server = new Server(this); // this es la clase llamada "pirulete"

El tema es que "Server" agregaria un Control a "pirulete"

//parent = pirulete o pirulo
this.parent.Controls.Add(this.MyControl);

En este caso dentro de server parent deberia estar en el constructor
algo asi como

//
Pirulo parent;
o
Pirulete parent;

public class Server() {...}
//
Alguna vez by algo de Type pero no recuerdo en donde y si es util para el
caso

"Octavio Hernandez" escribió en el mensaje
news:%
> Smeagol,
>
> a) La herencia y el polimorfismo son la solución para eso.
> Si quieres poder pasar al servidor objetos de las clases 'ClienteA',
> 'ClienteB' y 'ClienteC', diseña estas clases de forma tal que todas
> hereden
> de una clase 'ClienteBase' y redefinan los métodos virtuales definidos


en
> esta. Al programar tu servidor, utiliza:
>
> public Server (ClienteBase cl)
> {
> }
>
> A ese constructor podrás pasarle objetos de las clases A, B o C, según


te
> convenga.
>
> b) Las interfaces se pueden utilizar también con ese mismo fin.
> c) Si las clases que quieres pasar no están hechas por tí, no satisfacen
> una
> jerarquía o interfaz común, o sería demasiado trabajo modificarlas, en
> último caso todos heredan de object - puedes utilizar object como tipo
> "declarado" de esa variable. Claro, luego tendrás que estar haciendo
> 'castings' a esa variable para acceder a sus propiedades, métodos, etc.
>
> Slds,
>
> Octavio
>
> "smeagol" <pedorro77.hotmail.com> escribió en el mensaje
> news:eot8$
>> Imaginen tener una clase llamada server que necesita acceder a la clase
>> parent (llamada "client" aqui), pero la clase "client" puede llamarse
>> "pirulo", como puedo acceder desde la clase "server" a un metodo de la
> clase
>> "pirulo" o "pirulos" (que obviamente tendria el metodo a llamar desde
>> server)
>> El tema es que tambien necesita declarar esta clase variable en el
>> constructo.
>>
>> public class client : Windows.Forms.Form {
>> public client{ new server(this); }
>> public Write { System.Console.Write("HI"); }
>> }
>>
>> public class server {
>> public client cl;
>>
>> public server (client cl) { cl.Write(); }
>> // public server (can_be_any_name cl) { cl.Write(); }
>> }
>>
>>
>
>


Respuesta Responder a este mensaje
#5 smeagol
10/10/2004 - 03:28 | Informe spam
Si, son User Control.

He probado con parent y no me funcionaba (no accedia a los metodos no
heredados). De todas formas volvere a ver "Parent" a ver si era algun otro
error.
Gracias por tu tiempo.


"Octavio Hernandez" escribió en el mensaje
news:
smeagol,

"pirulo" y "pirulete" no son cualquier cosa, sino clases herederas de
Form,
no? ¿o de Control?
Si declaras el parámetro del constructor de Server como Form, por ejemplo,
podrás aplicarle 'Parent' sin necesidad de reflexión ni nada por el
estilo.

Slds - Octavio

"smeagol" <pedorro77.hotmail.com> escribió en el mensaje
news:
>> Si las clases que quieres pasar no están hechas por tí
ese es el caso. el programador deberia tener la libertad de usar
cualquier
nombre para su clase.
Solo deberia pasar la clase al motor "server", el cual se encargaria de
un
monton de cosas algo asi como

Server server = new Server(this); // this es la clase llamada "pirulo"

pero otro ejemplo podria ser

Server server = new Server(this); // this es la clase llamada "pirulete"

El tema es que "Server" agregaria un Control a "pirulete"

//parent = pirulete o pirulo
this.parent.Controls.Add(this.MyControl);

En este caso dentro de server parent deberia estar en el constructor
algo asi como

//
Pirulo parent;
o
Pirulete parent;

public class Server() {...}
//
Alguna vez by algo de Type pero no recuerdo en donde y si es util para
el
caso

"Octavio Hernandez" escribió en el mensaje
news:%
> Smeagol,
>
> a) La herencia y el polimorfismo son la solución para eso.
> Si quieres poder pasar al servidor objetos de las clases 'ClienteA',
> 'ClienteB' y 'ClienteC', diseña estas clases de forma tal que todas
> hereden
> de una clase 'ClienteBase' y redefinan los métodos virtuales definidos


en
> esta. Al programar tu servidor, utiliza:
>
> public Server (ClienteBase cl)
> {
> }
>
> A ese constructor podrás pasarle objetos de las clases A, B o C, según


te
> convenga.
>
> b) Las interfaces se pueden utilizar también con ese mismo fin.
> c) Si las clases que quieres pasar no están hechas por tí, no
> satisfacen
> una
> jerarquía o interfaz común, o sería demasiado trabajo modificarlas, en
> último caso todos heredan de object - puedes utilizar object como tipo
> "declarado" de esa variable. Claro, luego tendrás que estar haciendo
> 'castings' a esa variable para acceder a sus propiedades, métodos, etc.
>
> Slds,
>
> Octavio
>
> "smeagol" <pedorro77.hotmail.com> escribió en el mensaje
> news:eot8$
>> Imaginen tener una clase llamada server que necesita acceder a la
>> clase
>> parent (llamada "client" aqui), pero la clase "client" puede llamarse
>> "pirulo", como puedo acceder desde la clase "server" a un metodo de la
> clase
>> "pirulo" o "pirulos" (que obviamente tendria el metodo a llamar desde
>> server)
>> El tema es que tambien necesita declarar esta clase variable en el
>> constructo.
>>
>> public class client : Windows.Forms.Form {
>> public client{ new server(this); }
>> public Write { System.Console.Write("HI"); }
>> }
>>
>> public class server {
>> public client cl;
>>
>> public server (client cl) { cl.Write(); }
>> // public server (can_be_any_name cl) { cl.Write(); }
>> }
>>
>>
>
>






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida