B3-T6_.NET Flashcards
¿Cuál es el conjunto de componentes software de Microsoft .NET FRAMEWORK que se utilizan por los programadores para acceder a datos y servicios de datos?
ADO.NET
¿Qué utilidad tiene ASP.NET?
Se utiliza para crear aplicaciones WEB DINÁMICAS de Microsoft.
¿Qué API de Microsoft .NET se usa para programación de INTERFACES GRÁFICAS?
Windows Forms
¿Qué es NHIBERNATE y qué tiene que ver con Hibernate?
Es la conversión de Hibernate de Java a C# para su integración en .NET.
¿Cuál es el equivalente al concepto de “package” en .NET (C# y VB)?
NAMESPACE
*Un namespace o espacio de nombres es un medio para organizar clases dentro de un entorno, agrupándolas de un modo más lógico y jerárquico.
¿Cómo nos importamos una librería en .NET? pon un ejemplo.
Con using.
PRIMERO: hay que instalarla:
dotnet add package System.Net
SEGUNDO: la importamos:
using System.Net;
NOTA: la librería “System.Net” es para peticiones HTTM y recibir objetos JSON.
Con Java tenemos print y println para imprimir por pantalla, pero ¿cómo se hace en C#?
Console.Write => escribir el texto seguido (como “print”).
Console.WriteLine => lo escribe en lineas diferentes (como “println”).
NOTA: también puede incluir {INDICADORES}. Se pueden usar tantos como variables hayan:
Console.WriteLine (“Mi nombre es {0} y mi edad {1}”, nombre, edad);
*Los números indican la posición del variable, es decir, el “0” indica la primera variable, el “1” indica la segunda, …
IMPORTANTE: con el comando Console.Read o Console.Read.Key(), el programa nos pediría pulsar una tecla para continuar mostrando la información (así no lo mostraría todo de golpe).
También tenemos las instrucción Console.ReadLine para, en lugar de mostrar, introduce información por consola:
nombre = Console.WriteLine (); => nos pediría que introduzcamos un “nombre”.
Sabemos que en C#, además de las variables EXPLICITAS como en Java (int num=4;), existen las variables IMPLÍCITAS, ¿en qué consisten y como se declaran?
No hay que declararlas “explícitamente”, basa con asignarles el valor y según dicho valor el mismo sabrá el tipo de variable al que pertenece.
Se declaran con la palabra clave: var y hay que declararlas e iniciarlas en la misma linea:
Ej. CORRECTO:
var num=42;
Ej. INCORRECTO:
var num;
NUM=42;
IMPORTANTE: en C# las CONSTANTES (Const, en Java seria con Final) también hay que iniciarlas en el momento de crearlas:
Const double PI= 3,14; => este valor NO podrá ser cambiado durante la ejecución del programa.
Sabemos que un bucle es una estructura repetitiva que permite ejecutar el código de su interior, pero ¿cuál es la diferencia entre el bucle WHILE y el DO WHILE?
En el bucle WHILE primero se evalúa la condición y luego se ejecuta el código.
En cambio, en el bucle DO WHILE, primero se ejecuta el código y luego se evalúa la condición, es decir, con DO WHILE siempre se ejecutará el código mínimo una vez:
do
{
//código
{
while (condición)
NOTA: también tenemos el bucle FOR:
for(variable inicial; Condición; Incremento)
ej: for(int x=1; x<=5; x++){
Console.WriteLine (x);
}
1
2
3
4
5
Sabemos que un bucle esta programado para repetirse 3 veces, ¿hay alguna manera de omitir alguna de dichas repeticiones en C#?
Con la instrucción CONTINUE.
Si usamos continue dentro del bucle, en el momento de evaluar continue el bucle omitirá esa repetición, ejecutándose sólo 2 veces.
for (int i=0; i<10; i++)
{
if (i==5)
Continue;
Console.WriteLine (i);
}
/* Omite lo que hay dentro del “continue”, es decir, NO mostroará el “5”.
0
1
2
3
4
6
7
8
9
¿En qué se diferencia la instrucción if-else del Operador Condicional?
Hacen lo mismo, pero el Operador Condicional de una manera más reducida.
SINTAXIS Operador Condiconal:
Expresión1 ? Expresión2 : Expresión3; => SI LA 1ª ES VERDADERA IMPRIME LA 2ª, SI NO LO ES IMPRIME LA 3ª.
EJEMPLO con “if-else”:
int edad= 23;
string mensaje;
if (edad>= 18)
mensaje = “Bienvenido”;
else
mensaje= “NO puedes entrar”;
Console.WriteLine (mensaje);
EJEMPLO con “Operador Condicional”:
int edad= 23;
string mensaje;
mensaje=(edad<=18)?”Bienvenido”:”NO puedes entrar”;
Console.WriteLine (mensaje);
.NET FrameWork es lo que JRE es para Java, pero para .NET, es decir, es el corazón de la plataforma.NET (La VM + Librerías de Clases).
Pero, ¿es el único framework de .NET?
Al principio si, pues sólo era para Microsoft. Pero luego fueron apareciendo más con idea de usar la plataforma .NET en otros lenguajes, convirtiéndose en un estándar más aperturista.
El primero fue MONO, que es parecido a .NET FrameWork, pero para LINUX, creado por Icaza (Ximian), creador de GNOME (entorno de escritorio de Linux).
MONO, se puede instalar en LINUX, MacOS, UNIX, Windows, …
Entonces Microsoft estandariza todo a través de 2 estandares ECMA:
*Uno parecido a JVMS (Java Virtual Machine Specifications), pero más flexible y llamado ECMA 335 con el que creó el estándar CLI.
*Y, por otro lado, también estandarizó el lenguaje C# con el ECMA 334, es decir, C# ya es un lenguaje estándar, no sólo de Microsoft.
En resumen, .NET pasa a tener 4 productos en 2 vertientes:
1.WINDOWS -> implementaciones de Microsoft.
2-LINUX (MONO), .NET CORE y DOTGNU Portable .NET.
.NET, para poderse usar con más frameworks o lenguajes además del suyo de Microsoft (.NET FrameWork), ¿con qué 2 estándares se estandarizó?
ECMA 334: estandariza C# (pasando a ser un lenguaje estándar, y NO sólo de Microsoft).
ECMA335: se llama CLI (Common Languaje Infraestructure). Este documento estandariza varias cosas (parecido a JVMS de Java):
1.El CLI estandariza el código intermedio (CIL) especificando un conjunto de instrucciones => definiendo el código CIL (bytecode).
2.Describe la arquitectura general del CLI:
a)CTS (Common Type System): tipos de datos (clases, enumeraciones, interfaces, estructuras y delegados).
b)CLS (Common Languaje Specification): reglas que indican como es ese lenguaje y capacidad.
NOTA: CTS y CLS, son los requisitos que tienen que cumplir cualquier lenguaje o FW que quiera ser compatible con .NET.
c)VES (Virtual Execution System): define el CLR (así llamó Microsoft a su Motor de Ejecución y JRE se llama en Java).
*VES es la capa que interpreta el código CIL, es decir, define el CLR.
*CLR es una implementación de VES.
En Java hay 3 empaquetadores: .ear (empaquetado de aplicaciones Java EE), .war (módulos Web dentro del .ear) y .jar (módulos EJB dentro del .ear).
¿Cuáles son los formatos de empaquetado en .NET?
.dll o .exe
Portan el assembly, que es el empaquetado del código CIL en formato .dll o .exe, es decir, es el empaquetado de varias clases .exe y .dll.
NOTA:este empaquetado o ensamblado, se puede desensamblar con ildasm.exe
¿Qué semejanza tienen los ficheros.class de Java y los ficheros.dll o ficheros.exe de .NET?
El .class es el bytecode de Java y los .dll y .exe son los CIL de .NET.
El bytecode (Java) y CIL (.NET) son los ficheros de nuestro programa ya complicados, que se empaquetan en el assembly con extensión .dll o .exe y serán traducidos a código máquina a través del JRE (Java) y CLR (.NET) respectivamente.
Sabemos que el assembly es el empaquetado de CIL en formato .dll o .exe y que puede verse o desempaquetarse con ildasm.exe, pero, ¿qué contiene además del CIL?
-
Manifest: fichero que informa sobre los metadatos del assembly:
*Nombre sencillo.
*Número de versión.
*Información cultural.
*Clave pública. - _Metadata
-
CIL: (Common Intermediate Language) es un archivo binario que contiene el código de bytes generado por el compilador de .NET cuando se compila un programa escrito en un lenguaje compatible con .NET, como C# o Visual Basic .
El código CIL se ejecuta en la máquina virtual de Common Language Runtime (CLR) de .NET.
IMPORTANTE: el CIL era conocido como MSIL (Microsoft Intermediate Language). - Firma Digital
NOTA: el archivo de ensamblado (assembly) puede ser de dos tipos: ensamblados privados o ensamblados compartidos.
Los privados se usan para aplicaciones de un solo uso y los compartidos para permitir la reutilización de código entre aplicaciones.
Con CLASSPATH en Java sabemos las rutas de las clases para que puedan ser cargadas por el ClassLoader (proceso de la JRE).
En .NET ¿donde se indican las rutas de los assembly para que los ejecute el CLR Loader?
En el GAC (Global Assembly cache), es un equivalente al CLASSPATH de Java, donde se encuentran las rutas de los ensamblados registrados y librerías de terceros que importamos de 3 maneras:
- gacutil -i “librería.dll”
- using “librería”
- indicando la ruta manualemnte (como en ClassPath)
*Estas librería se instalarían en el fichero GAC:
/usr/lib/mono/gac
Sabemos que el assembly empaqueta varias clases o CILs en .exe o .dll, pero ¿sabrías resumir el proceso completo?
1º De un código fuente (C#, vb.net u otro lenguaje que cumpla CLS/CTS) se genera el CIL (bytecode en Java).
2º Luego, el assembly empaqueta dicho código en .exe o .dll.
3º En el GAC (/usr/lib/mono/gac) registramos estos archivos empaquetados:
gacutil -i “fichero.dll”
NOTA: una vez en el GAC se ejecutan con CLR Loader.
NOTA2: este empaquetado o ensamblado, se puede desensamblar con ildasm.exe
Sabemos que las especificaciones Java se recogen en el JVMS (Java Virtual Machine Specificatión), para que otras plataformas, con JRE instaladas, puedan ejecutar un programa Java.
Para estandarizar .NET y poderse usar con otros lenguajes, además de Micrososft), en lugar de un documento (JVMS), hay 2: CLS y CTS, pero ¿qué son y que especifican?
CLS: (Common Languaje Specification): es un conjunto de reglas y requisitos que los lenguajes de programación deben seguir para ser compatibles entre sí y poder funcionar dentro del mismo entorno de ejecución de .NET.
CTS: (Common Type System) s el sistema de tipos común de .NET, que define cómo se representan los tipos de datos :
Clases (Reference Type)
Estructuras (Value Type)
Enumeraciones (Value Type)
Interfaces (Reference Type)
Delegados (Reference Type) => son punteros a funciones.
NOTA: VES (Virtual Execution System) es la capa que interpreta el CIL, es decir, define el CLR.
*CLR es una implementación de VES.
IMPORTANTE: estas 3 especificaciones (CLS, CTS y VES) estan recogidas en el documento CLI (Common Languaje Infraestructure), que, a través de dicjas especificaciones, define el CIL para que puedan implementarlo otro lenguajes => ECMA 334
Define los módulos del CLR (JRE en Java) basándote en la foto:
Base Class Library Support: cargador de las Clases BASE.
NOTA: en .NET un paquete es un Espacio de Nombres (NameSpace).
Thread Support: gestión de hilos (CLR planifica hilos en ejecución en lugar de procesos).
Marshaller: transforma un objeto a otro formato. (Ej: Java->XML).
Type Checker: corrector de tipos.
Exception Manager: gestión de exceptiones.
Security Engine: motor de seguridad.
Debug Engine: motor de depuración (encontrar y corregir errores observando/monitoreando el código fuente).
JIT Compiler: (Just In Time) el compilador JIt transforma el código binario (bytecode o cil) a código máquina o NATIVO.
Garbage Collector: Recolector de Basura => libera memoria eliminado objetos en desuso.
CLR Loader: carga las rutas (clases) del GAC.
La parte de FOUNDATION de .NET FrameWork 3.0 son tecnologías para cubrir aspectos donde no llega Micrososft.
Define dichas tecnologías:
WPF: (Windows Presentation Foundation) para hacer interfaces de usuario MULTIPLATAFORMAS.
WCF: (Windows Comunication Foundation) amplia los Web Services (incluye seguridad en servicios SOAP: ws-Security).
WWF: (Windows Forkflow Foundation) para crear aplicaciones para flujos de datos.
¿Qué 2 herramientas importantes se introdujeron en .NET FrameWork 3.5?
1.LINQ: (Language INtegrated Query) ofrece una sintaxis de consultas a C# y VB.NET para poder guardar y recuperar datos de diferentes tipos de fuente (SQL, XML, …).
2.ENTITY FrameWork: (ORM) este ORM fue una gran innovación para guardar objetos en una BD Relacional sin tocar SQL (parecido al JPA).
ORMs de JPA: Hibernate (Java), Nhibernate (.NET), Eclipse Link (antes TopLink) y Open JPA.
mnemotecnia: estas 2 herramientas se compenetran muy bien: una sería la buscadora (LINQ) y la otra la guardadora (EF).
La versión actual de .NET FrameWork es la 4.8, pero ¿puedes explicar algunas tecnologías que hayan ido introduciendo las anteriores versiones hasta la 4.8?
.NET FrameWork 2.0:
1.Common Language Runtime => CLR (JRE en Java): entorno de ejecución (VM) de .NET FrameWork que, entre los servicios que proporciona (manejo de la memoria, gestión de excepciones, GC o la seguridad), compila el código fuente escrito en lenguajes de programación .NET como C#, VB.NET o F#, en código CIL.
2.FrameWork Class Librery => o BLC (Biblioteca de ClasesBase) son las clases base en .NET en paquetes, aunque los paquetes en .NET se llaman NameSpaces.
NOTA: parecido a rt.java.
3.WinForms: para hacer aplicaciones de escritorio para Windows.
4.ASP.NET: (ASPX) clases para hacer aplicaciones web.
5.ADO.NET: clases para acceder y manipular datos en bases de datos relacionales.
.NET FrameWork 3.0:
WPF: Windows Presentation Foundation => (para interfaces de usuario multiplataforma)
WCF: Windows Comunicaction Foundation => (para crear Web Services SOAP)
WWF: Windows Forkflow Foundation => (aplicaciones de flujos de datos)
Card Space
.NET FrameWork 3.5:
LINQ: consultas
Entity FW: ORM
.NET FrameWork 4.0:
Hasta aquí, la versión de CLR correspondía con la de .NET FW, pero a partir de la 4.0 sólo cambia el framework (4.8 actualmente), pues el CLR se mantendrá como CLR 4.0.
.NET FrameWork 4.5 => 4.8 (actual).
Sabemos que Icaza (en su fundación: Ximian) fue el primero que rompió la independencia de .NET FrameWork creando el framework MONO para poder usar otros SSOO (LINUX, MacOS, UNIX,…) sobre .NET FrameWork además de Windows.
Pero ¿qué hizo Microsoft al respecto?
Decide elevar a estándar su plataforma:
PRIMERO, lo estandariza implantando el ECMA 335_ y declarando a C# open source con el ECMA 334.
DESPUÉS, creó .NET CORE (open source) en 2016.
Este framework es gratuito y de código abierto para Windows, Linux y MacOS, es decir, es la versión MULTIPLATAFORMAS de .NET FrameWork (el cual reinó hasta 2015).
POR ÚLTIMO, en la versión 5 (2020) del mencionado .NET Core, fundió ambos FW (.NET FrameWork + .NET CORE) en uno, llamado .NET.
NOTA: Entonces, las versiones empezaron a llamarse:
.NET 5 (el primero que fusionó los antiguos) => 2020.
.NET 6 (es el actual).
.NET 7 y 8 (están en proyecto).
Sabemos que Micrososft, además de estandarizar su framework (ECMA 335) y C# (ECMA 334), en 2016 creó una primera versión MULTIPLATAFORMAS, llamada .NET Core y hace competencia a MONO (Icaza).
Comenta algunas de sus características:
*Su CLR se llama CoreCLR.
*La librería de clases base, antes llamada BLC (Class Base Library) o FLC (Framework Class Library), pasas a llamarse CoreFX.
*Su versión 1.0 nace en 2016 y se mantiene hasta su versión 3.1 de 2019 => pues en 2020 funde esta versión MULTIPLATAFORMAS .NET Core con la MONOPLATAFORMAS .NETFrameWork en una única versión llamada .NET 5 (MultiPlataformas).
NOTA: esta nueva y única versión multiplataformas (.NET), mantiene el CoreCLR y CoreFX.
Sabemos que cada plataforma tenía sus propias librerías de clases: .NET FrameWork (.NET BCL o FCL), .NET Core (CoreFX) y Xamarin (Mono BCL).
¿Qué hace el estándar .NET Standar 2.0 al respecto?
.NET Standar 2.0 unifica las 3 librerías de dichos 3 estándares, homogeneizando el uso de TODAS las clases y así disponer de las mismas clases en las 3 plataformas (.NET FrameWork, .NET Core y Xamarin),
.NET BCL + CoreFX + Mono BCL = .NET STANDARD 2.0
NOTA: ya con .NET 5 (2020), se unificaron las librerías de .NET FW y .NET Core tras las fusión de ambas plataformas.
Sabemos que .NET Standard 2.0 unificó las librerías de clases de las 3 plataformas: .NET FW (.NET BCL), .NET Core (CoreFX) y Xamarin (Mono BCL), para que los 3 puedan usar TODAS las clases.
Pero ¿qué librerías y clases son esas?
.NET STANDARD 2.0
LIBRERÍA => CLASES
XML => XLinq - XML Document - XPath - XSD - XSL
SERIALIZATION => BinaryFormatter - Data Contract - XML
NetWorking => Sockets - WebSockets - Http - Mail
IO => Files - Compression - MMF
THREADING => Threads - Thread Pool - Tasks
CORE => Primitives - Collections - Reflection - Interop - Linq
NOTA: ya con .NET 5 (2020), se unificaron las librerías de .NET FW y .NET Core tras las fusión de ambas plataformas.
La herramienta dotnet se introdujo en .NET Core 1.0, que fue lanzado en junio de 2016.
¿Qué utilidad tiene dicha herramienta?
Esta herramienta se incluye en el SDK (kit de desarrollo de software) de .NET Core y proporciona un conjunto de comandos de línea de comandos para crear, compilar, publicar y ejecutar aplicaciones .NET Core en diferentes plataformas y sistemas operativos.
Desde la versión 2.0 de .NET Core, la herramienta “dotnet” también se utiliza para instalar y administrar paquetes NuGet, lo que antes se hacía con la herramienta “nuget.exe”.
La herramienta “dotnet” (introducida en .NET Core 1.0 e incluida en su JDK) proporciona una amplia gama de funciones que permiten a los desarrolladores de .NET Core crear, compilar, publicar, ejecutar y administrar aplicaciones .
Expón algunas de dichas funciones:
new: crea un nuevo proyecto .NET Core a partir de una plantilla específica.
**restore**: descarga y restaura los paquetes NuGet necesarios para un proyecto. **build**: compila un proyecto .NET Core y crea un ensamblado ejecutable. **publish**: publica una aplicación .NET Core en un formato específico para una plataforma de destino, como un archivo .exe, .dll o un archivo ZIP. **run**: ejecuta una aplicación .NET Core. **test**: ejecuta pruebas unitarias en un proyecto. **pack**: crea un paquete NuGet a partir de un proyecto .NET Core. **add**: agrega una referencia a un paquete NuGet a un proyecto existente.
dotnet es la herramienta de línea de comandos que aporta .NET Core 1.0 para generar código, compilar (build), ejecutar una aplicación (run), hacer pruebas (test),empaqueta (pack) …
Expón algunas de sus sintaxis:
dotnet -h => muestra todos los comandos.
dotnet add package PAQUETE => para agregar un PAQUETE NuGet a un proyecto .NET Core.
dotnet new console => para crear una aplicación tipo “consola”.
dotnet run => ejecuta el programa.
Maven es la herramienta de Java para la Gestión de Dependencias y la Automatización de Tareas, ¿cómo se llevarían a cabo estos 2 procesos con dotnet?
En lugar de sólo con una herramienta (Maven), en dotnet se realiza con 2 herramientas independientes*:
dotnet nuget (Dependencias) y msbuild (Tareas).
1.dotnet nuget => proporciona comandos nuget adicionales, para la Gestión de Dependencias:
EJEMPLO:
dotnet nuget add source: Agregar una fuente de paquetes NuGet al archivo de configuración de NuGet.
2.dotnet msbuild => herramientas de dotnet para la Automatización de Tareas: construcción del proyecto, compilación empaquetado, …
EJEMPLO:
dotnet msbuild C:\MyProject\MyProject.csproj => compila el proyecto “MyProject.csproj”, que se encuentra ubicado en la carpeta “MyProject”.
NOTA: una vez compilado, se generará un archivo ejecutable que podremos ejecutar en nuestra máquina.
NuGet es un Gestor de Paquetes de .NET y permite buscar, instalar, actualizar y desinstalar fácilmente paquetes de código abierto o de terceros en los proyectos de .NET.
Pero, ¿cuál es su sintaxis?
*nuget <comando> [opciones] [argumentos]*</comando>
a) <comando>: es el comando que desea ejecutar, como install, uninstall, update, restore, list, push, pack, entre otros. b) [opciones]: son las opciones que se pueden especificar con el comando. c) [argumentos]: son los argumentos necesarios para el comando (nombre del paquete o la ubicación del archivo).
EJEMPLO1:
nuget install Newtonsoft.Json
“Esto instalará el paquete Newtonsoft.Json en nuestro proyecto y todas sus dependencias”.
EJEMPLO2:
*nuget update <nombre>*</nombre>
“Esto actualizará el paquete especificado en el proyecto y todas sus dependencias, si es necesario”.
La Estructura de Programación de Java se compone de: clases, interfaces, enumerados y anotaciones y la de C# de: clases, record (registros), interfaces y enumerados.
¿De qué se compone la Estructura de Programación de vb.net?
1.CLASES: estructura de programación con atributos y métodos, que sirve para crear objetos.
Class nombre => para declarar una clase.
…
End Class
2.ESTRUCTURAS: (parecidas a las clases)
*NO permiten herencias (NoInherits).
*NO permite inicializar los campos (atributos).
*Por defecto, TODOS sus métodos son públicos.
*Value Type: (tipo de valor) se pasa x valor de forma natural, es decir, una estructura con varios campos tarda más que una con menos.
A diferencia de Value Reference, (valor x referencia): strings, arrays, delegates, clases,…
Structure nombre => para declarar una estructura.
…
End Structure
3.MÓDULO: un módulo (module) es un saco de funciones => es para tener un grupo de funciones globales.
Module nombre
…
End Module
En Java los métodos void son los que NO devuelven valor.
¿Hay alguna similitud en vb.net?
Si, en vb.net se llaman subrutinas (sub), que es un método que NO devuelve valor.
En cambio, cuando SI devuelve valor se llama function.
Subrutinas (sub) / funciones (function)
Con final en Java, declaramos que de una clase NO se pueda heredar.
¿Hay alguna similitud en vb.net?
NotInheritable.
Lo contrario seria MustInherit, que es como decir que se pueda heredar y sobrescribir la clase en cuestión.
IMPORTANTE: las herencias se declaran en Java con extends y en vb.net con inherits.
La Estructura de Programación* de vb.net se compone de clases, estructuras y módulos.
Expón algunas características de los modules y pon algún ejemplo:
Un module es una agrupación de funciones o subrutinas (sub), por ejemplo, en un módulo podemos definir las funciones de una BD:
public module BBDD
…
end module
=> Un module es similar a una clase: sólo se inicializa 1 vez y con todos sus miembros shared (estáticos).
shared = static (Java)
NOTA: se puede acceder a los métodos y variables de una clase static sin crear una instancia de la misma.
=> Los módulos NO admiten herencia ni implementan interfaces.
La Estructura de Programación* de vb.net se compone de clases, estructuras y módulos.
Y, sabemos que un structure es una especie de “REGISTRO”, parecida a una clase, pero con 3 restricciones.
¿Cuáles son esas 3 restricciones?
- No se permiten **inherits* (herencias). Aunque, si implements (interfaces).
- No se pueden inicializar campos.
- Por defecto, todos sus miembros son públicos.
Principales diferencias entre los 3 componentes que forman la Estructura de vb.net:
_CLASES:
SI herencia.
SI implementar interfaces (implements).
NOTA: la herencia solo se aplica a las clases (Class) en VB.NET**
_MODULES:
NO herencia.
NO implementaciones.
NOTA: sus miembros son shared (static = que Java) => se puede acceder a los métodos y variables de una clase static sin crear una instancia de la misma.
STRUCTURE:
NO herencia.
SI implements (interface).
NOTA: en vb.net se implemetan las interfaces IGUAL que en Java => implements nombre_interfaz
¿Qué utilidad tiene la palabra clave partial en vb.net?
partial divide una clase, estructura, interfaz o módulo, pudiendo repartir su código por el documento u otros ficheros.vb.
¿Qué utilidad tiene la palabra clave shadow en vb.net?
La palabra reservada Shadows en VB.NET se utiliza para crear un nuevo miembro en una clase que tiene el mismo nombre que un miembro en una clase base, pero con una implementación diferente.
La palabra clave Shadows permite redefinir un miembro en una clase base, ocultando su implementación original. Esto se utiliza cuando se quiere tener un comportamiento diferente en el miembro en la clase derivada, que no es el mismo que el comportamiento del miembro en la clase base.
¿Qué utilidad tiene la palabra clave overridable en vb.net?
Es lo mismo que una clase abstracta de Java, es decir, la palabra clave “Overridable” en VB.NET se utiliza para crear una CLASE base que puede ser extendida por clases derivadas.
En un MÉTODO podrá ser reemplazado / modificado por una implementación personalizada en una clase derivada.
*Tenemos 2 variantes:
MustOverride: para que los hijos sobrescriban.
NotOverride: método que NO se puede sobrescribir, igual que final método en Java.
RECORDATORIO: en vb.net se implementan las interfaces igual que en Java => implements
¿Qué utilidad tiene la clausula using en vb.net o C#?
El objetivo de la cláusula using en C# o Using en VB es el de asegurar que los recursos asociados a un determinado objeto se liberan siempre, es decir, se emplea para asegurar que al acabar de usarlo siempre se llama al método Dispose() del objeto que referenciamos dentro de la declaración de using, para liberarlo.
Es decir, se utiliza para implementar la disposición automática de recursos en un bloque. Cuando un objeto implementa la interfaz IDisposable, puede utilizar un bloque “using” para asegurarse de que se libere el recurso utilizado por el objeto tan pronto como se completa el bloque.
FUNCIONAMIENTO: se declara el principio de un bloque using, para usar los recursos de dicho bloque, y una vez terminado, el bloque se libera gracias al método dispose, que es llamado por using AUTOMÁTICAMENTE una vez finalizado el boque.
using{resource list}
[staments]
end using
resurce = recurso
stament = declaración
NOTA: el método “Dispose” en VB.NET se utiliza para liberar recursos no administrados que se utilizan en un objeto o bloque using, como conexiones de bases de datos, archivos, sockets, entre otros.
El bloque “Using” en VB.NET se utiliza para asegurarse de que los objetos que implementan IDisposable se liberen correctamente, incluso en caso de excepciones o errores. Es decir, usas los recursos que aporta el bloque using y, una vez finalizado, using llama automáticamente al método dispose y este libera el bloque.
Pero, ¿puedes poner algún ejemplo?
En la foto se muestra un ejemplo de cómo se puede utilizar el bloque “Using” en VB.NET para trabajar con un objeto que implementa IDisposable, en este caso, una conexión de base de datos.
dim: se usa para declarar variables (= que var en Java).
Se utiliza un objeto “SqlConnection” para conectarse a una base de datos y realizar operaciones en ella.
El bloque “Using” se encarga de llamar automáticamente al método “Dispose” del objeto “SqlConnection” al final del bloque, lo que garantiza que la conexión se cierre y se liberen los recursos.
Es importante destacar que el bloque “Using” solo se puede utilizar con objetos que implementan IDisposable
NOTA: el uso de “Using” puede ayudar a garantizar que los recursos se liberen de manera oportuna y segura, lo que puede mejorar el rendimiento y reducir los errores en la aplicación.