Foros del Web » Programando para Internet » ASPX (.net) »

Atributo de una Clase Tipo otra Clase

Estas en el tema de Atributo de una Clase Tipo otra Clase en el foro de ASPX (.net) en Foros del Web. Estoy haciendo una aplicación orientada a objetos: Tengo dos clases, una se llama clsCliente y otra clsDireccion. La definición de mi clase cliente es la ...
  #1 (permalink)  
Antiguo 02/10/2005, 13:23
Avatar de RsOfT  
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 1 mes
Puntos: 7
Atributo de una Clase Tipo otra Clase

Estoy haciendo una aplicación orientada a objetos:
Tengo dos clases, una se llama clsCliente y otra clsDireccion.

La definición de mi clase cliente es la siguiente:
Código:
Public Class clsCliente
    '--Variables de los Atributos--
    Dim a_lngClienteID As Long
    Dim a_strNombre As String
    Dim a_strDireccion As clsDireccion
    '------------------------------

#Region "Atributos"
    Property ClienteID()
        Get
            Return a_lngClienteID
        End Get
        Set(ByVal Value)
            a_lngClienteID = Value
        End Set
    End Property    
    Property Nombre()
        Get
            Return a_strNombre
        End Get
        Set(ByVal Value)
            a_strNombre = Value
        End Set
    End Property
    Property Direccion()
        Get
            Return a_strDireccion
        End Get
        Set(ByVal Value)
            a_strDireccion = Value
        End Set
    End Property
#End Region
End Class 
En la clase clsDireccion Tengo los atributod de DireccionID, Calle, Sector, Ciudad, etc.
Cuando creo la instancia del objeto asi:
Código:
Dim cCliente as clsCliente = new clsCliente
¿No se supone que cuando me refiera al atributo direccion podré ver los atributos de la clase dirección?
Osea, me refiero a que quisiera poder hacer esto:
Código:
cCliente.Direccion.Calle ó cCliente.Direccion.Sector, etc
Eso no se puede?

¿Me dan alguna ayudita al respecto?
__________________
.::RsOfT::.
--El que se aferra a lo conocido, nunca conocerá lo desconocido--
--Es intentando lo imposible como se realiza lo posible--
--Es de pésimo gusto contentarse con algo mediocre cuando lo excelente está a nuestro alcance--

Última edición por RsOfT; 02/10/2005 a las 16:13
  #2 (permalink)  
Antiguo 03/10/2005, 01:14
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Yo creo que sí se debe de poder, prueba, generando un contructor para cliente, y en este a inicializar la clase dirección.
  #3 (permalink)  
Antiguo 03/10/2005, 06:54
Avatar de RsOfT  
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 1 mes
Puntos: 7
Todas mis clases tienen contructor y como quiera no le da esa funcionalidad.

He notado que si manejo la variable directamente poniéndola pública y sin pasar por la propiedad para accederla, entonces si funciona.

O sea, si declaro la varibale así:
Código:
Public a_strDireccion As clsDireccion
Entonces, cuando llamo a la instancia del objeto si me deja acceder a las propiedades de la clase Dirección, ejemplo.
cCliente.a_strDireccion.Calle

Todo esto me da a entender que no es necesario crear propiedades en las clases, ya que se pueden manejar con las variables públicas. Pero mi pregunta es, ¿Si puedo manejar las variables directamente, que ventaja tiene crear las propiedades? ¿Creo que para algo están ahi, no creen?
__________________
.::RsOfT::.
--El que se aferra a lo conocido, nunca conocerá lo desconocido--
--Es intentando lo imposible como se realiza lo posible--
--Es de pésimo gusto contentarse con algo mediocre cuando lo excelente está a nuestro alcance--
  #4 (permalink)  
Antiguo 03/10/2005, 08:15
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
El uso de las propiedades, según entiendo yo, es por estructuración, y por que p.ej. podrías declarar una como solo lectura y tal.

de todas formas puedes intentar esto (para seguir manejando propiedades):

Property Direccion() As clsDireccion
Get

End Get
Set(ByVal Value As clsDireccion)

End Set
End Property
  #5 (permalink)  
Antiguo 03/10/2005, 08:33
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Cita:
Iniciado por RsOfT
Estoy haciendo una aplicación orientada a objetos:
Tengo dos clases, una se llama clsCliente y otra clsDireccion.

La definición de mi clase cliente es la siguiente:
Código:
Public Class clsCliente
    '--Variables de los Atributos--
    Dim a_lngClienteID As Long
    Dim a_strNombre As String
    Dim a_strDireccion As clsDireccion
    '------------------------------

#Region "Atributos"
    Property ClienteID()
        Get
            Return a_lngClienteID
        End Get
        Set(ByVal Value)
            a_lngClienteID = Value
        End Set
    End Property    
    Property Nombre()
        Get
            Return a_strNombre
        End Get
        Set(ByVal Value)
            a_strNombre = Value
        End Set
    End Property
    Property Direccion()
        Get
            Return a_strDireccion
        End Get
        Set(ByVal Value)
            a_strDireccion = Value
        End Set
    End Property
#End Region
End Class 
No deberías poner el modificador "Public" a las propiedades que quieras que sean públicas? Y aparte, el tipo de datos de la propiedad? Uséase...

Public Property ClienteID() As String (Bueno, supongo que esta no será string ...)
[...]
End Property

Saludos!
__________________
..:: moNTeZIon ::..
  #6 (permalink)  
Antiguo 03/10/2005, 11:58
Avatar de RsOfT  
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 1 mes
Puntos: 7
Tienen razón, era el tipo de dato de la propiedad lo que me faltaba.
Muchas Gracias

PD:
Si no le indico si es public o private, el .NET asume que el publico por defecto.
__________________
.::RsOfT::.
--El que se aferra a lo conocido, nunca conocerá lo desconocido--
--Es intentando lo imposible como se realiza lo posible--
--Es de pésimo gusto contentarse con algo mediocre cuando lo excelente está a nuestro alcance--
  #7 (permalink)  
Antiguo 03/10/2005, 13:05
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Yo diría que si no le indicas nada es private, pero no estoy seguro, porque creo recordar de no encontrar variables por no decirle explicitamente que es público
  #8 (permalink)  
Antiguo 03/10/2005, 13:14
Avatar de RsOfT  
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 1 mes
Puntos: 7
Puedes estar seguro de lo que te estoy diciendo, pues yo estaba utilizando las propiedades sin especificarle que es public.
__________________
.::RsOfT::.
--El que se aferra a lo conocido, nunca conocerá lo desconocido--
--Es intentando lo imposible como se realiza lo posible--
--Es de pésimo gusto contentarse con algo mediocre cuando lo excelente está a nuestro alcance--
  #9 (permalink)  
Antiguo 04/10/2005, 01:21
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Me alegro que lo hayas solucionado.
Respecto a los modificadores, yo me encontré que con una variable declarada en la clase con un Dim, no la veía desde fuera, en cambio sustituyendo el Dim por el Public, ya estuvo accesible.
Con las propiedades ocurre que es publica directamente, por lo que dices RsOfT? Y con los métodos también?

Saludos!
__________________
..:: moNTeZIon ::..
  #10 (permalink)  
Antiguo 04/10/2005, 06:13
Avatar de RsOfT  
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 1 mes
Puntos: 7
Todo lo que obvies ponerle public o private, el default es public, ya sean variables, propiedades o métodos.
__________________
.::RsOfT::.
--El que se aferra a lo conocido, nunca conocerá lo desconocido--
--Es intentando lo imposible como se realiza lo posible--
--Es de pésimo gusto contentarse con algo mediocre cuando lo excelente está a nuestro alcance--
  #11 (permalink)  
Antiguo 04/10/2005, 10:00
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Fuente:
http://msdn.microsoft.com/library/sp...wfccontrol.asp
Cita:
De forma predeterminada, los controles contenidos en un control de usuario son Private y no es posible tener acceso a sus propiedades por ningún medio.

Sugerencia Si desea que los futuros usuarios del control de usuario tengan acceso a los controles internos, declárelos como Public o Protected. Esto le permitirá establecer y modificar las propiedades de los controles contenidos en el control de usuario, mediante el código adecuado.
Prueba:

Código:
public class Prueba
public sub new()
end sub
dim variable as string
End Class

public class Prueba2
dim prueba_primera as new Prueba
prueba_primera.variable   'Subrayado
end class
error: no se puede tener acceso a Prueba.variable en este contexto debido a que es Private.


Lo siento RsOfT pero te tengo que quitar la razón, cualquier variable, propiedad o método por defecto es privado en .NET
  #12 (permalink)  
Antiguo 04/10/2005, 11:04
Avatar de RsOfT  
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 1 mes
Puntos: 7
Lo lamento Jose_minglein2, pero su documento no tiene razón.

Acabo de crear una subrutina en una clase y no le especifiqué nada, y por defecto es public, cree una funciona sin nada y también la veo, cree una propiedad y también la veo.

Lo único que no funcionó fue la variable, porque al no ponerle DIM o PUBLIC da error.

Haz la prueba y convencete tu mismo.
__________________
.::RsOfT::.
--El que se aferra a lo conocido, nunca conocerá lo desconocido--
--Es intentando lo imposible como se realiza lo posible--
--Es de pésimo gusto contentarse con algo mediocre cuando lo excelente está a nuestro alcance--
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:14.