![]() |
| |||
| On 26 ago, 14:27, elgoog <irodriguezcre...***gmail.com> wrote: > Claro... si la clase Circulo hereda de la clase Figura, tu puedes > tener un array tipo Figura donde le puedes meter Circulos, Cuadrados, > etc... > > Pero lo que no puedes tener es un array de circulos con ***Figuras que > no sean circulos... > > ¿no? > > On 26 ago, 08:46, qpassa <peroquemeestasconta...***gmail.com> wrote: > > > > > no se, pero según tenía yo entendido, la gracia de la herencia era, > > por ejemplo, poder tener un array definido del tipo de la clase base y > > luego poder tener elementos en él de las clases derivadas...- Ocultartexto de la cita - > > - Mostrar texto de la cita - ¿y puedo igualar un círculo a una figura? ¿se rellenarán los datos del círculo correspondientes a la clase base? gracias. |
| | ||||
| ||||
| |
| |||
| On 26 ago, 14:27, elgoog <irodriguezcre...***gmail.com> wrote: > Claro... si la clase Circulo hereda de la clase Figura, tu puedes > tener un array tipo Figura donde le puedes meter Circulos, Cuadrados, > etc... > > Pero lo que no puedes tener es un array de circulos con ***Figuras que > no sean circulos... > > ¿no? > > On 26 ago, 08:46, qpassa <peroquemeestasconta...***gmail.com> wrote: > > > > > no se, pero según tenía yo entendido, la gracia de la herencia era, > > por ejemplo, poder tener un array definido del tipo de la clase base y > > luego poder tener elementos en él de las clases derivadas...- Ocultartexto de la cita - > > - Mostrar texto de la cita - ¿y puedo igualar un círculo a una figura? ¿se rellenarán los datos del círculo correspondientes a la clase base? gracias. |
| |||
| On 26 ago, 14:27, elgoog <irodriguezcre...***gmail.com> wrote: > Claro... si la clase Circulo hereda de la clase Figura, tu puedes > tener un array tipo Figura donde le puedes meter Circulos, Cuadrados, > etc... > > Pero lo que no puedes tener es un array de circulos con ***Figuras que > no sean circulos... > > ¿no? > > On 26 ago, 08:46, qpassa <peroquemeestasconta...***gmail.com> wrote: > > > > > no se, pero según tenía yo entendido, la gracia de la herencia era, > > por ejemplo, poder tener un array definido del tipo de la clase base y > > luego poder tener elementos en él de las clases derivadas...- Ocultartexto de la cita - > > - Mostrar texto de la cita - ¿y puedo igualar un círculo a una figura? ¿se rellenarán los datos del círculo correspondientes a la clase base? gracias. |
| |||
| "qpassa" preguntó: > ¿y puedo igualar un círculo a una figura? Si la clase Circulo hereda de la clase Figura, no puedes asignar un objeto Circulo a un objeto Figura, porque obtendrás una excepción InvalidCastException. Es decir, lo siguiente no está permitido: Dim f As New Figura Dim c As Circulo = DirectCast(f, Circulo) Ahora bien, a un objeto Figura sí le puedes asignar un objeto Circulo: Dim c As New Circulo Dim f As Figura = c A un objeto de la clase base le puedes asignar un objeto derivado de dicha clase, pero no al contrario. Piensa que a un objeto Animal le puedes asignar un objeto Perro, pero ¿quién te dice a tí que el objeto Animal no esté actualmente referenciando a un objeto Gato? Dim g As New Gato Dim a As Animal = g ' Esto provocará una InvalidCastException ' Dim p As Perro = DirectCast(a, Perro) Como sabemos, los perros y los gatos no se llevan muy bien que digamos. :-) > ¿se rellenarán los datos del círculo correspondientes a la clase base? No entiendo tu pregunta. Como te han comentado anteriormente, puedes definir un array tipo Figura (que es la clase base) y asignarle a los elementos del array un objeto Circulo (que es la clase derivada): Dim c As New Circulo Dim f(2) As Figura ' Cada elemento del array referenciará ' al objeto Circulo ' f(0) = c f(1) = c f(2) = c Cada elemento del array tendrá los valores de las propiedades del objeto Circulo que se encuentren implementadas en la clase base. Pero si la clase Circulo implementa por su cuenta una nueva propiedad llamada «Area», obviamente no tendrás acceso a ella mediante un objeto de la clase base, es decir, de la clase Figura, de ahí que a un objeto de la clase derivada (Circulo) no le puedas asignar un objeto de la clase base (Figura), salvo que el objeto de la clase base sí referencie a un objeto derivado. Continuando con el ejemplo anterior, ésto sí está permitido: Dim nuevoCirculo As Circulo = DirectCast(f(2), Circulo) ya que el elemento del array está referenciando a un objeto Circulo. Un saludo -- Enrique Martínez [MS MVP - VB] Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje. |
| |||
| "qpassa" preguntó: > ¿y puedo igualar un círculo a una figura? Si la clase Circulo hereda de la clase Figura, no puedes asignar un objeto Circulo a un objeto Figura, porque obtendrás una excepción InvalidCastException. Es decir, lo siguiente no está permitido: Dim f As New Figura Dim c As Circulo = DirectCast(f, Circulo) Ahora bien, a un objeto Figura sí le puedes asignar un objeto Circulo: Dim c As New Circulo Dim f As Figura = c A un objeto de la clase base le puedes asignar un objeto derivado de dicha clase, pero no al contrario. Piensa que a un objeto Animal le puedes asignar un objeto Perro, pero ¿quién te dice a tí que el objeto Animal no esté actualmente referenciando a un objeto Gato? Dim g As New Gato Dim a As Animal = g ' Esto provocará una InvalidCastException ' Dim p As Perro = DirectCast(a, Perro) Como sabemos, los perros y los gatos no se llevan muy bien que digamos. :-) > ¿se rellenarán los datos del círculo correspondientes a la clase base? No entiendo tu pregunta. Como te han comentado anteriormente, puedes definir un array tipo Figura (que es la clase base) y asignarle a los elementos del array un objeto Circulo (que es la clase derivada): Dim c As New Circulo Dim f(2) As Figura ' Cada elemento del array referenciará ' al objeto Circulo ' f(0) = c f(1) = c f(2) = c Cada elemento del array tendrá los valores de las propiedades del objeto Circulo que se encuentren implementadas en la clase base. Pero si la clase Circulo implementa por su cuenta una nueva propiedad llamada «Area», obviamente no tendrás acceso a ella mediante un objeto de la clase base, es decir, de la clase Figura, de ahí que a un objeto de la clase derivada (Circulo) no le puedas asignar un objeto de la clase base (Figura), salvo que el objeto de la clase base sí referencie a un objeto derivado. Continuando con el ejemplo anterior, ésto sí está permitido: Dim nuevoCirculo As Circulo = DirectCast(f(2), Circulo) ya que el elemento del array está referenciando a un objeto Circulo. Un saludo -- Enrique Martínez [MS MVP - VB] Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje. |
| |||
| "qpassa" preguntó: > ¿y puedo igualar un círculo a una figura? Si la clase Circulo hereda de la clase Figura, no puedes asignar un objeto Circulo a un objeto Figura, porque obtendrás una excepción InvalidCastException. Es decir, lo siguiente no está permitido: Dim f As New Figura Dim c As Circulo = DirectCast(f, Circulo) Ahora bien, a un objeto Figura sí le puedes asignar un objeto Circulo: Dim c As New Circulo Dim f As Figura = c A un objeto de la clase base le puedes asignar un objeto derivado de dicha clase, pero no al contrario. Piensa que a un objeto Animal le puedes asignar un objeto Perro, pero ¿quién te dice a tí que el objeto Animal no esté actualmente referenciando a un objeto Gato? Dim g As New Gato Dim a As Animal = g ' Esto provocará una InvalidCastException ' Dim p As Perro = DirectCast(a, Perro) Como sabemos, los perros y los gatos no se llevan muy bien que digamos. :-) > ¿se rellenarán los datos del círculo correspondientes a la clase base? No entiendo tu pregunta. Como te han comentado anteriormente, puedes definir un array tipo Figura (que es la clase base) y asignarle a los elementos del array un objeto Circulo (que es la clase derivada): Dim c As New Circulo Dim f(2) As Figura ' Cada elemento del array referenciará ' al objeto Circulo ' f(0) = c f(1) = c f(2) = c Cada elemento del array tendrá los valores de las propiedades del objeto Circulo que se encuentren implementadas en la clase base. Pero si la clase Circulo implementa por su cuenta una nueva propiedad llamada «Area», obviamente no tendrás acceso a ella mediante un objeto de la clase base, es decir, de la clase Figura, de ahí que a un objeto de la clase derivada (Circulo) no le puedas asignar un objeto de la clase base (Figura), salvo que el objeto de la clase base sí referencie a un objeto derivado. Continuando con el ejemplo anterior, ésto sí está permitido: Dim nuevoCirculo As Circulo = DirectCast(f(2), Circulo) ya que el elemento del array está referenciando a un objeto Circulo. Un saludo -- Enrique Martínez [MS MVP - VB] Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje. |
| |||
| On 26 ago, 19:53, SoftJaén <grupo_notic...***softjaen.es> wrote: > "qpassa" preguntó: > > > ¿y puedo igualar un círculo a una figura? > > Si la clase Circulo hereda de la clase Figura, no puedes asignar un objeto > Circulo a un objeto Figura, porque obtendrás una excepción > InvalidCastException. Es decir, lo siguiente no está permitido: > > *** *** Dim f As New Figura > *** *** Dim c As Circulo = DirectCast(f, Circulo) > > Ahora bien, a un objeto Figura sí le puedes asignar un objeto Circulo: > > *** *** Dim c As New Circulo > *** *** Dim f As Figura = c > > A un objeto de la clase base le puedes asignar un objeto derivado de dicha > clase, pero no al contrario. > > Piensa que a un objeto Animal le puedes asignar un objeto Perro, pero ¿quién > te dice a tí que el objeto Animal no esté actualmente referenciando aun > objeto Gato? > > *** *** Dim g As New Gato > > *** *** Dim a As Animal = g > > *** *** ' Esto provocará una InvalidCastException > *** *** ' > *** *** Dim p As Perro = DirectCast(a, Perro) > > Como sabemos, los perros y los gatos no se llevan muy bien que digamos. :-) > > > ¿se rellenarán los datos del círculo correspondientes a la clase base? > > No entiendo tu pregunta. Como te han comentado anteriormente, puedes definir > un array tipo Figura (que es la clase base) y asignarle a los elementos del > array un objeto Circulo (que es la clase derivada): > > *** *** Dim c As New Circulo > *** *** Dim f(2) As Figura > > *** *** ' Cada elemento del array referenciará > *** *** ' al objeto Circulo > *** *** ' > *** *** f(0) = c > *** *** f(1) = c > *** *** f(2) = c > > Cada elemento del array tendrá los valores de las propiedades del objeto > Circulo que se encuentren implementadas en la clase base. Pero si la clase > Circulo implementa por su cuenta una nueva propiedad llamada «Area», > obviamente no tendrás acceso a ella mediante un objeto de la clase base, es > decir, de la clase Figura, de ahí que a un objeto de la clase derivada > (Circulo) no le puedas asignar un objeto de la clase base (Figura), salvo > que el objeto de la clase base sí referencie a un objeto derivado. > > Continuando con el ejemplo anterior, ésto sí está permitido: > > *** *** Dim nuevoCirculo As Circulo = DirectCast(f(2), Circulo) > > ya que el elemento del array está referenciando a un objeto Circulo. > > Un saludo > > -- > Enrique Martínez > [MS MVP - VB] > > Nota informativa: La información contenida en este mensaje, así como el > código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin > garantías de ninguna clase, y no otorga derecho alguno. Usted asume > cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o > sugerido en el presente mensaje. Ok, muchísimas gracias, esta es la clave "Dim nuevoCirculo As Circulo = DirectCast(f(2), Circulo)" Vamos que si yo estoy seguro que lo que me voy a encontrar en f(2) es un objeto Círculo no hay ningun problema. Y hay que usar DirectCast en vez de CType. Repito, muchas gracias Enrique. Explicación magistral. Un saludo. |
| |||
| On 26 ago, 19:53, SoftJaén <grupo_notic...***softjaen.es> wrote: > "qpassa" preguntó: > > > ¿y puedo igualar un círculo a una figura? > > Si la clase Circulo hereda de la clase Figura, no puedes asignar un objeto > Circulo a un objeto Figura, porque obtendrás una excepción > InvalidCastException. Es decir, lo siguiente no está permitido: > > *** *** Dim f As New Figura > *** *** Dim c As Circulo = DirectCast(f, Circulo) > > Ahora bien, a un objeto Figura sí le puedes asignar un objeto Circulo: > > *** *** Dim c As New Circulo > *** *** Dim f As Figura = c > > A un objeto de la clase base le puedes asignar un objeto derivado de dicha > clase, pero no al contrario. > > Piensa que a un objeto Animal le puedes asignar un objeto Perro, pero ¿quién > te dice a tí que el objeto Animal no esté actualmente referenciando aun > objeto Gato? > > *** *** Dim g As New Gato > > *** *** Dim a As Animal = g > > *** *** ' Esto provocará una InvalidCastException > *** *** ' > *** *** Dim p As Perro = DirectCast(a, Perro) > > Como sabemos, los perros y los gatos no se llevan muy bien que digamos. :-) > > > ¿se rellenarán los datos del círculo correspondientes a la clase base? > > No entiendo tu pregunta. Como te han comentado anteriormente, puedes definir > un array tipo Figura (que es la clase base) y asignarle a los elementos del > array un objeto Circulo (que es la clase derivada): > > *** *** Dim c As New Circulo > *** *** Dim f(2) As Figura > > *** *** ' Cada elemento del array referenciará > *** *** ' al objeto Circulo > *** *** ' > *** *** f(0) = c > *** *** f(1) = c > *** *** f(2) = c > > Cada elemento del array tendrá los valores de las propiedades del objeto > Circulo que se encuentren implementadas en la clase base. Pero si la clase > Circulo implementa por su cuenta una nueva propiedad llamada «Area», > obviamente no tendrás acceso a ella mediante un objeto de la clase base, es > decir, de la clase Figura, de ahí que a un objeto de la clase derivada > (Circulo) no le puedas asignar un objeto de la clase base (Figura), salvo > que el objeto de la clase base sí referencie a un objeto derivado. > > Continuando con el ejemplo anterior, ésto sí está permitido: > > *** *** Dim nuevoCirculo As Circulo = DirectCast(f(2), Circulo) > > ya que el elemento del array está referenciando a un objeto Circulo. > > Un saludo > > -- > Enrique Martínez > [MS MVP - VB] > > Nota informativa: La información contenida en este mensaje, así como el > código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin > garantías de ninguna clase, y no otorga derecho alguno. Usted asume > cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o > sugerido en el presente mensaje. Ok, muchísimas gracias, esta es la clave "Dim nuevoCirculo As Circulo = DirectCast(f(2), Circulo)" Vamos que si yo estoy seguro que lo que me voy a encontrar en f(2) es un objeto Círculo no hay ningun problema. Y hay que usar DirectCast en vez de CType. Repito, muchas gracias Enrique. Explicación magistral. Un saludo. |
| |||
| On 26 ago, 19:53, SoftJaén <grupo_notic...***softjaen.es> wrote: > "qpassa" preguntó: > > > ¿y puedo igualar un círculo a una figura? > > Si la clase Circulo hereda de la clase Figura, no puedes asignar un objeto > Circulo a un objeto Figura, porque obtendrás una excepción > InvalidCastException. Es decir, lo siguiente no está permitido: > > *** *** Dim f As New Figura > *** *** Dim c As Circulo = DirectCast(f, Circulo) > > Ahora bien, a un objeto Figura sí le puedes asignar un objeto Circulo: > > *** *** Dim c As New Circulo > *** *** Dim f As Figura = c > > A un objeto de la clase base le puedes asignar un objeto derivado de dicha > clase, pero no al contrario. > > Piensa que a un objeto Animal le puedes asignar un objeto Perro, pero ¿quién > te dice a tí que el objeto Animal no esté actualmente referenciando aun > objeto Gato? > > *** *** Dim g As New Gato > > *** *** Dim a As Animal = g > > *** *** ' Esto provocará una InvalidCastException > *** *** ' > *** *** Dim p As Perro = DirectCast(a, Perro) > > Como sabemos, los perros y los gatos no se llevan muy bien que digamos. :-) > > > ¿se rellenarán los datos del círculo correspondientes a la clase base? > > No entiendo tu pregunta. Como te han comentado anteriormente, puedes definir > un array tipo Figura (que es la clase base) y asignarle a los elementos del > array un objeto Circulo (que es la clase derivada): > > *** *** Dim c As New Circulo > *** *** Dim f(2) As Figura > > *** *** ' Cada elemento del array referenciará > *** *** ' al objeto Circulo > *** *** ' > *** *** f(0) = c > *** *** f(1) = c > *** *** f(2) = c > > Cada elemento del array tendrá los valores de las propiedades del objeto > Circulo que se encuentren implementadas en la clase base. Pero si la clase > Circulo implementa por su cuenta una nueva propiedad llamada «Area», > obviamente no tendrás acceso a ella mediante un objeto de la clase base, es > decir, de la clase Figura, de ahí que a un objeto de la clase derivada > (Circulo) no le puedas asignar un objeto de la clase base (Figura), salvo > que el objeto de la clase base sí referencie a un objeto derivado. > > Continuando con el ejemplo anterior, ésto sí está permitido: > > *** *** Dim nuevoCirculo As Circulo = DirectCast(f(2), Circulo) > > ya que el elemento del array está referenciando a un objeto Circulo. > > Un saludo > > -- > Enrique Martínez > [MS MVP - VB] > > Nota informativa: La información contenida en este mensaje, así como el > código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin > garantías de ninguna clase, y no otorga derecho alguno. Usted asume > cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o > sugerido en el presente mensaje. Ok, muchísimas gracias, esta es la clave "Dim nuevoCirculo As Circulo = DirectCast(f(2), Circulo)" Vamos que si yo estoy seguro que lo que me voy a encontrar en f(2) es un objeto Círculo no hay ningun problema. Y hay que usar DirectCast en vez de CType. Repito, muchas gracias Enrique. Explicación magistral. Un saludo. |
| |||
| "qpassa" escribió: > si yo estoy seguro que lo que me voy a encontrar en f(2) es > un objeto Círculo no hay ningun problema. Efectivamente, así es. Pero si en lugar de un Circulo hay un objeto Cuadrado, ya obtienes la excepción de conversión, utilices el operador «CType» o «DirectCast». > Y hay que usar DirectCast en vez de CType. Si lo deseas, puedes utilizar el operador «CType». Lo que ocurre es que, si estás utilizando «tipos por referencia», se aconseja utilizar el operador «DirectCast», que es un "pelín" más rápido que el operador «CType». En cambio, si utilizas «tipos por valor», como puede ser una estructura, o una variable Integer o Double, entonces necesitarás hacer la conversión con el operador «CType», que funciona tanto para los tipos por referencia como para los tipos por valor. Como alternativa al operador «DirectCast», puedes utilizar el operador «TryCast», que también sólo funciona con «tipos por referencia», como son las clases e interfaces. La diferencia está en que si no se puede efectuar la conversión, «DirectCast» producirá una excepción «InvalidCastException», y «TryCast» devolverá el valor «Nothing» en lugar de provocar una excepción. Como observarás, hay alternativas para todo. :-) -- Enrique Martínez [MS MVP - VB] Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje. |
| |
| |
![]() |
| Herramientas | |
| Desplegado | |
| |
Temas Similares | ||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Herencia | Javier Lozano | Newsgroup microsoft.public.es.csharp | 6 | 11-05-2008 17:31:18 |
| Herencia | Morgan | Newsgroup es.humanidades.derecho | 0 | 09-10-2007 17:45:34 |
| Herencia | Rafael Minuesa | Newsgroup es.humanidades.derecho | 201 | 15-09-2007 20:30:09 |
| Herencia | Rafael Minuesa | Newsgroup es.soc.org.policia | 169 | 15-09-2007 20:30:09 |
| Herencia | Apache | Newsgroup es.humanidades.derecho | 12 | 09-04-2007 11:38:19 |