.:.
En C# las clases estáticas (Static Class) y sus miembros se utilizan para crear propiedades y métodos a las que se puede tener acceso sin crear una instancia de la clase. Se Utiliza una clase estática para contener métodos que no estén asociados a un objeto concreto. Las características principales de una clase estática son:
- Sólo contienen miembros estáticos.
- No se puede crear instancias de ellas.
En VB.Net este concepto se llamada miembros compartidos y tal como las las clases estáticas de C#, Los miembros compartidos son propiedades, procedimientos y campos que comparten todas las instancias de una clase o estructura. Este concepto tan poderoso lo podemos implementar en vbscript muy fácilmente siguiendo el estándar para crear un repositorio de clases que analizamos en nuestro anterior articulo; las pautas importantes para lograr este objetivo son:
- Todo nuestro código esta almacenado en un único directorio que actúa como un repositorio de Clases.
- Por la filosofía del IncludeTemplate.vbs tenemos habilitada la posibilidad de hacer include dinámico de nuestras clases. Además nos garantiza que cada archivo de clases se incluye una sola vez.
- Siempre el nombre de la clase a usar será igual al nombre del archivo incluido mas la extensión “.class”.
Con base a las definiciones anteriores lo que tenemos que hacer para la simulación de miembros compartidos es en el código de definición de la clase que se encuentra en el archivo .class; Se cambia para nuestro beneficio la filosofía del punto 3, aquí la clase definida va a tener un nombre que solo se usara internamente y al inicio del código se instanciara un objeto de esta clase con el nombre con que va a ser referenciada la clase externamente; con este truco con solo hacer include al archivo de la clase estará disponible para nuestro uso sin necesidad de crear una instancia. Para aclarar veamos un ejemplo de una clase que llamaremos whoami.class que tendrá 2 métodos:
- Username: Nos dirá cual es nuestro usuario cada vez que lo invoquemos.
- ComputerName: Informara el nombre del equipo donde esta ejecutando nuestro script.
Los contenidos del script de este ejemplo el cual llamamos SampleSharedClass.vbs y de la clase whoami.class, son:
RepositoryFolderPath ="Your_Respository_Path"
Include "whoami.class"
WScript.Echo "My User:",whoami.Username
WScript.Echo "My Computer:",whoami.Computername
Como se puede observar para usar la clase whoami no creamos ninguna instancia, solo hacemos el include de la clase y enseguida la usamos.
If IsEmpty(Whoami) Then
Set Whoami = New Internal_Name_200906112305_whoami
Else
Err.Raise 99,,"Shared class 'Whoami' can not be used because" &_
"the variable is already being used"
End If
Class Internal_Name_200906112305_whoami
Private p_objNetwork
Private Sub Class_Initialize
Set p_objNetwork = CreateObject("WScript.Network")
End Sub
Private Sub Class_Finalize
Set p_objNetwork = Nothing
End Sub
Function UserName
UserName = p_objNetwork.UserDomain & "\" & p_objNetwork.UserName
End Function
Function ComputerName
ComputerName = p_objNetwork.ComputerName
End Function
End Class
Se puede apreciar que el truco es sencillo, simplemente instanciamos un objeto Whoami a partir de la clase Internal_Name_200906112305_whoami, que es la clase realmente definida y que es poco probable que su nombre lo podamos usarlo en nuestros scripts por la dificultad de su nomenclatura. Antes de crear el objeto Whoami, validamos que no exista una variable ya creada con el mismo nombre y de ser asi generamos una excepción.
Esta solución la usaremos en nuestro próximo articulo para crear una clase manejadora de objetos tales como Shell, FileSystemObject y Network y con ello evitamos la duplicidad de instancias de estos objetos en nuestros scripts. Los archivos SampleSharedClass.vbs y whoami.class los podemos encontrar en la pagina de descargas, buscando por los criterios MySamples: Simulating C# Shared Classes in vbscript y MyClasses: Whoami Class.