índice de vb.net

Declaraciones de variables y visibilidad


Actualizado: 25/Oct/2000



Por ahora sólo está el código, más adelante puede que comente el código mostrado...

Este ejemplo consta de dos ficheros.

 


Fichero: Prueba2_23Oct.vb
'
'------------------------------------------------------------------------------
' Prueba de declaraciones de variables y visibilidad                (24/Oct/00)
'
' ©Guillermo 'guille' Som, 2000
'
' Para compilar:
' vbc Prueba2_23Oct.vb Prueba1_23Oct.vb /t:exe /r:System.dll
'------------------------------------------------------------------------------
Imports System
'
' Este Fichero usa lo que ya está en el Namespace:
Imports Guille.Ejemplos.Prueba1_23Oct

Namespace Guille.Ejemplos.Prueba2_23Oct
    '
    Public Module MPrueba2_23Oct
    ' El módulo se usará como punto de entrada
        '
        Public Sub Main2()
            Mensaje("Prueba2 de visibilidad y alcance de las variables")
            Mensaje
            ' Declarar un objeto del tipo Clase1
            Dim tClase1 As New Clase1
            With tClase1
                Mensaje("Antes de asignar el nombre a Nombre")
                Mensaje(".Nombre: " & .Nombre)
                .Nombre = "Guille"
                Mensaje("Después de asignar el nombre: .Nombre = 'Guille'")
                Mensaje(".ShowNombre: " & .ShowNombre)
                Mensaje(".ShowHola: " & .ShowHola)
            End With
            '
            ' No podemos declarar objetos del tipo Clase2,
            ' ya que está declarada como Private
            Mensaje
            ' Declaramos una variable del tipo Clase3
            Dim tClase3 As New Clase3
            Mensaje("tClase3.ShowHola: " & tClase3.ShowHola)
            Mensaje("tClase3.ShowNombre: " & tClase3.ShowNombre)
            'Mensaje("tClase3.ShowNombre1: " & tClase3.ShowNombre1)
            '
            Mensaje
            ' Declaramos una variable del tipo Clase4
            Dim tClase4 As New Clase4
            Mensaje("tClase4.ShowHola: " & tClase4.ShowHola)
            '
            Mensaje
            ' Accedemos a la variable Hola declarada en el Módulo MPrueba1_23Oct
            Mensaje("El valor de la variable Hola: " & Hola)
            '
            Mensaje
            Dim tClase10 As New Clase10
            Mensaje("tClase10.ShowHola: " & tClase10.ShowHola)
            '
            Mensaje
            Dim tClase5 As New Clase5
            ' Item es la propiedad por defecto
            Dim s As String = tClase5("Hola")
            Mensaje("s As String = tClase5('Hola'), s = " & s)
            Mensaje("tClase5, devuelve = " & tClase5(""))

            Mensaje()
            ' Final
            Console.Write("Pulsa una INTRO")
            Dim tmp As String = Console.ReadLine()
        End Sub
        '
    End Module
    '
    Public Class Prueba2
        Shared Public Sub Main()
            Mensaje("Main de la clase Prueba2")
            Mensaje("------------------------")
            Main2
        End Sub
    End Class
    '
    Public Class Clase10 : Inherits Clase1
        Overrides Public Function ShowHola() As String
            Return "ShowHola en la Clase10"
        End Function
    End Class
End Namespace



Fichero: Prueba1_23Oct.vb

'------------------------------------------------------------------------------
' Prueba de declaraciones de variables y visibilidad                (23/Oct/00)
'
' ©Guillermo 'guille' Som, 2000
'
' Para compilar:
' vbc Prueba1_23Oct.vb /t:exe /r:System.dll
'------------------------------------------------------------------------------
Imports System

' Asigna el valor 0 si quieres probar este fichero de forma independiente
#Const MainDeclarado = 1

Namespace Guille.Ejemplos.Prueba1_23Oct
    '
    ' No se pueden declarar variables en un Namespace
    'Private Hola As String ="Hola en Namespace" ' No se puede
    '
    'Protected Hola As String ="Hola en Namespace" ' Tampoco se puede
    '
    'Friend Hola As String ="Hola en Namespace"  ' Tampoco...
    '
    'Public Hola As String ="Hola en Namespace"  ' Tampoco
    '
    '
    Public Module MPrueba1_23Oct
    ' El módulo se usará como punto de entrada
        '
        ' Variable Friend, visible en todo el Namespace
        Friend Hola As String ="Hola en Module"
        '
        #if MainDeclarado = 0 Then
        Public Sub Main()
            Mensaje("Prueba de visibilidad y alcance de las variables")
            Mensaje
            ' Declarar un objeto del tipo Clase1
            Dim tClase1 As New Clase1
            With tClase1
                Mensaje("Antes de asignar el nombre a Nombre")
                Mensaje(".Nombre: " & .Nombre)
                .Nombre = "Guille"
                Mensaje("Después de asignar el nombre: .Nombre = 'Guille'")
                Mensaje(".ShowNombre: " & .ShowNombre)
                Mensaje(".ShowHola: " & .ShowHola)
            End With
            '
            Mensaje
            ' Otra forma de declarar los objetos
            Dim tClase2 As Clase2
            ' Ya no se usa SET para asignar objetos
            tClase2 = New Clase2
            ' Aunque de esta otra no se podría: Dim tClase2 = New Clase2
            Mensaje("tClase2.ShowHola: " & tClase2.ShowHola)
            '
            Mensaje("tClase2.ShowNombre: " & tClase2.ShowNombre)
            '
            Mensaje("tClase2.Valor = 5")
            tClase2.Valor = 5
            Mensaje("tClase2.Valor * 2: " & tClase2.Valor * 2)
            Mensaje("tClase2.ShowNombre1: "  & tClase2.ShowNombre1)
            ' Esto no se puede hacer, ya que Nombre2 es Privada
            'Mensaje("tClase2.Nombre2: " & tClase2.Nombre2)
            'Mensaje("tClase2.ShowNombre2: " & tClase2.ShowNombre2)
            ' Esto tampoco se puede hacer, ya que Nombre1 está declarada
            ' como Protected en Clase1
            'Mensaje("tClase2.Nombre1: " & tClase2.Nombre1)
            '
            Mensaje("tClase2.ShowHola2: "  & tClase2.ShowHola2)
            Mensaje
            ' Declaramos una variable del tipo Clase3
            Dim tClase3 As New Clase3
            Mensaje("tClase3.ShowHola: " & tClase3.ShowHola)
            Mensaje("tClase3.ShowNombre: " & tClase3.ShowNombre)
            'Mensaje("tClase3.ShowNombre1: " & tClase3.ShowNombre1)
            '
            Mensaje
            ' Declaramos una variable del tipo Clase4
            Dim tClase4 As New Clase4
            Mensaje("tClase4.ShowHola: " & tClase4.ShowHola)
            '
            Mensaje()
            ' Final
            Console.Write("Pulsa una INTRO")
            Dim s As String = Console.ReadLine()
        End Sub
        #endif
        '
        ' Método para mostrar los mensajes en la consola
        ' Los parámetros opcionales siempre tienen que tener un valor por defecto
        Public Sub Mensaje(Optional ByVal Msg As String = "")
            ' Muestra el contenido de la cadena en la consola
            Console.WriteLine(Msg)
        End Sub
        '
        ' También podemos declarar clases dentro de un Módulo       (24/Oct/00)
        ' Si no se indica el modificador de "visibilidad", será Friend
        Class Clase3 : Inherits Clase1
            Overrides Public Function ShowHola() As String
                ' Se puede devolver el valor de cuaquiera de estas dos formas:
                'Return "Hola en la Clase3"
                ShowHola = "Hola en la Clase3"
            End Function
        End Class
    End Module
    '
    ' Una clase declarada en el Namespace
    Public Class Clase1
        ' Variables dentro de la Clase Clase1
        '
        ' Public será visible en cualquier sitio
        Public Nombre As String = "Clase1"
        ' Protected sólo son visibles en las clases heredadas
        Protected Nombre1 As String = "Nombre1 de Clase1"
        ' Private sólo es visible en esta clase
        Private Nombre2 As String = "Nombre2 de Clase1"
        '
        ' Variables privadas para contener los valores de las propiedades
        Dim m_valor As Integer
        '
        ' Métodos y propiedades de la Clase1
        '
        ' Propieda por defecto:
        Public Default Property AsignarNombre2(ByVal elNombre As String) As String
            Get
                'Return Nombre2
                AsignarNombre2 = Nombre2
            End Get
            Set
                Nombre2 = elNombre
            End Set
        End Property
        '
        ' Declarar una propiedad
        Public Property Valor As Integer
            ' La parte GET es la que se encarga de devolver el valor
            ' Se puede usar Return xxx para devolver el valor xxx
            ' y también Valor = m_valor
            Get
                Return m_valor
            End Get
            ' La parte SET es la que se encarga de asignar el valor
            ' El valor que se asigna está en VALUE
            Set
                m_valor = Value
            End Set
        End Property
        '
        ' Método que devuelve el valor de la variable Hola declarada como Friend
        ' Para permitir que se pueda definir este método en una clase derivada
        ' hay que declararla como Overridable
        ' (¿No debería ser este valor por defecto?)
        Overridable Friend Function ShowHola () As String
            'Return MPrueba1_23Oct.Hola
            Return Hola
        End Function
        '
        Overridable Public Function ShowNombre() As String
            Return Nombre
        End Function
    End Class
    '
    ' Otra clase declarada en el mismo Namespace
    ' Las clases declaradas como Private sólo pueden ser heredadas por otras
    ' clases del tipo Private.
    Private Class Clase2 : Inherits Clase1
        '
        Private Hola As String = "Nueva variable Hola"
        '
        Public Function ShowHola2() As String
            Return Hola
        End Function
        '
        Overrides Public Function ShowHola() As String
            ' Esto no se puede hacer:
            'Return "Mostrar lo que había antes en Clase1= " & Clase1.ShowHola()
            ' Pero si lo que se quiere es usar el método de la clase base:
            'return MyBase.ShowHola()
            '
            ' No es necesario indicar que Hola pertenece al módulo MPrueba1_23Oct,
            ' salvo que en esta misma clase ya exista una variable con ese nombre
            Return "Desde la Clase2, Hola= " & MPrueba1_23Oct.Hola
        End Function
        '
        Overrides Public Function ShowNombre() As String
            ' La varibale Nombre se declaró en Clase1
            Return "El Nombre almacenado en Clase1: " & Nombre
        End Function
        '
        Public ReadOnly Property ShowNombre1() As String
            ' Esta propiedad es de sólo lectura
            Get
                Return Nombre1
            End Get
        End Property
        '
        'Public Function ShowNombre2() As String
        '    ' No se puede devolver Nombre2, porque está declarada como privada
        '    ' en Clase1
        '    Return Nombre2
        'End Function
    End Class
    '
    Friend Class Clase4: Inherits Clase3
        Overrides Public Function ShowHola() As String
            Return "Hola en la Clase4"
        End Function
    End Class
    '
    Public Class Clase5: Inherits Clase1
        Public Default ReadOnly Property Item(ByVal unSaludo As String) As String
            Get
                Return unSaludo & " " & Nombre1
            End Get
        End Property
        '
    End Class
End Namespace

...


Nos vemos.
Guillermo


Ir al índice de vb.net

la Luna del Guille o... el Guille que está en la Luna... tanto monta...