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 NamespaceFichero: 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