Sencilla para Expertos

12/07/2005 - 17:53 por Javier | Informe spam
object x;
MessageBox.Show(x.texto1);

Hola,
Alguno sabe como compilar una aplicación en c#
que tenga este "inconveniente", aquí expongo un ejemplo sencillo, pero mi
necesidad es para un desarrollo un tanto mas complejo.
El mismo codigo en Visual Basic .Net compila sin problemas ya que el
compilador supone que el objeto declarado en tiempo de ejecución podría
llegar a tener la propiedad texto 1.
En cambio en C# no compila.
espero vuestra ayuda
muchas gracias !

Preguntas similare

Leer las respuestas

#1 Carlos A. Leguizamón
12/07/2005 - 19:50 | Informe spam
Hola Javier, el problema es justamente, si la propiedad texto1 del objeto x
no tiene valor O el valor de la propiedad no es del tipo especificado, no
puede ejecutarse el método show del obj. messagebox.

Probá haciendo esto:

MessageBox.Show(x.texto1.ToString());

Saludos.
"Javier" escribió en el mensaje
news:

object x;
MessageBox.Show(x.texto1);

Hola,
Alguno sabe como compilar una aplicación en c#
que tenga este "inconveniente", aquí expongo un ejemplo sencillo, pero mi
necesidad es para un desarrollo un tanto mas complejo.
El mismo codigo en Visual Basic .Net compila sin problemas ya que el
compilador supone que el objeto declarado en tiempo de ejecución podría
llegar a tener la propiedad texto 1.
En cambio en C# no compila.
espero vuestra ayuda
muchas gracias !


Respuesta Responder a este mensaje
#2 Javier
12/07/2005 - 20:13 | Informe spam
Pero como se explica que en VBNet ese mismo codigo compile y en C# no.
Yo en realidad necesito que funcione porque en tiempo de ejecucion mi objeto
(de tipo object) tendría dicha propiedad.
un saludo y gracias !

"Carlos A. Leguizamón" wrote:

Hola Javier, el problema es justamente, si la propiedad texto1 del objeto x
no tiene valor O el valor de la propiedad no es del tipo especificado, no
puede ejecutarse el método show del obj. messagebox.

Probá haciendo esto:

MessageBox.Show(x.texto1.ToString());

Saludos.
"Javier" escribió en el mensaje
news:
>
> object x;
> MessageBox.Show(x.texto1);
>
> Hola,
> Alguno sabe como compilar una aplicación en c#
> que tenga este "inconveniente", aquí expongo un ejemplo sencillo, pero mi
> necesidad es para un desarrollo un tanto mas complejo.
> El mismo codigo en Visual Basic .Net compila sin problemas ya que el
> compilador supone que el objeto declarado en tiempo de ejecución podría
> llegar a tener la propiedad texto 1.
> En cambio en C# no compila.
> espero vuestra ayuda
> muchas gracias !
>
>



Respuesta Responder a este mensaje
#3 Octavio Hernandez
12/07/2005 - 20:22 | Informe spam
Javier,

Si no me equivoco, ese código VB.NET compila porque tienes la opción de
compilación Strict del proyecto en Off. Si lo pones a On (lo que recomiendo
yo siempre que puedo), la compilación fallará.
C# es un lenguaje con control de tipos estricto y no hay manera de hacerlo
que se "trague" eso que acepta VB.

Salu2 - Octavio

"Javier" escribió en el mensaje
news:

object x;
MessageBox.Show(x.texto1);

Hola,
Alguno sabe como compilar una aplicación en c#
que tenga este "inconveniente", aquí expongo un ejemplo sencillo, pero mi
necesidad es para un desarrollo un tanto mas complejo.
El mismo codigo en Visual Basic .Net compila sin problemas ya que el
compilador supone que el objeto declarado en tiempo de ejecución podría
llegar a tener la propiedad texto 1.
En cambio en C# no compila.
espero vuestra ayuda
muchas gracias !


Respuesta Responder a este mensaje
#4 Javier
12/07/2005 - 20:29 | Informe spam
Muchas Gracias !

"Octavio Hernandez" wrote:

Javier,

Si no me equivoco, ese código VB.NET compila porque tienes la opción de
compilación Strict del proyecto en Off. Si lo pones a On (lo que recomiendo
yo siempre que puedo), la compilación fallará.
C# es un lenguaje con control de tipos estricto y no hay manera de hacerlo
que se "trague" eso que acepta VB.

Salu2 - Octavio

"Javier" escribió en el mensaje
news:
>
> object x;
> MessageBox.Show(x.texto1);
>
> Hola,
> Alguno sabe como compilar una aplicación en c#
> que tenga este "inconveniente", aquí expongo un ejemplo sencillo, pero mi
> necesidad es para un desarrollo un tanto mas complejo.
> El mismo codigo en Visual Basic .Net compila sin problemas ya que el
> compilador supone que el objeto declarado en tiempo de ejecución podría
> llegar a tener la propiedad texto 1.
> En cambio en C# no compila.
> espero vuestra ayuda
> muchas gracias !
>
>



Respuesta Responder a este mensaje
#5 Tristan
14/07/2005 - 00:38 | Informe spam
Solo te añadiría que puedes hacer eso mismo en C# mediante reflection.

Pero reflection (o strict off en vb.net) debería ser siempre la última
opción. La mejor solución cuano sea posible, es declarar tu variable x
mediante un tipo base o interface, que realmente incluya el miembro Texto1.

La variable "x" para que funcione tu código, debe ser una instancia de una
clase, que necesariamente incluya un miembro Texto1. Estas clases podrían
ser las siguientes:

class Clase1
{
public string Texto1;
}

class Clase2
{
public string Texto1;
}

Para que tu código funcione correctamente tan solo tienes que hacer uso del
polimorfismo:

class BaseTexto1
{
public string Texto1;
}

class Clase1: BaseTexto1
{
}

class Clase2: BaseTexto1
{
}


De esta forma, desconocerás el tipo de x, pero podrás utilizar el miembro
Texto1:

BaseTexto1 x = ...;
MessageBox.Show(x.Texto1);

En muchas ocasiones se utilizan interfaces en lugar de herencia para lograr
esto mismo. La interface o la clase base definirán el comportamiento externo
conocido del objeto.


Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida