Está en la página 1de 33

Desarrollo de

componentes en Visual
Basic .NET
Descripción

 Descripción de los componentes


 Creación de componentes con servicio
 Creación de clases de componentes
 Creación de controles de formularios Windows Forms
 Hilos de ejecución
 Descripción de los componentes

 Tipos de componentes
 Uso de módulos como componentes
 Uso de clases como componentes
 Uso de componentes en aplicaciones cliente no gestionadas
 Descripción de .NET Remoting
Tipos de componentes

 Estructuras
 Módulos
 Clases
 Clases de componentes
 Componentes con servicio
 Controles de usuario
 Controles de usuario de formularios Windows Forms
 Controles de usuario de formularios Web Forms
Uso de módulos como componentes

 Declarar el módulo como público


 Referenciar e importar el ensamblado en código cliente
Public
Public Module
Module MyMathFunctions
MyMathFunctions
Public
Public Function Square(ByVal
Function Square(ByVal lng
lng As
As Integer)
Integer) As
As Long
Long
Return
Return (lng
(lng ** lng)
lng)
End Function
End Function
...
...
End
End Module
Module
  
'Client
'Client code
code
Imports MyAssembly
Imports MyAssembly
...
...
Dim
Dim xx As
As Long
Long == Square(20)
Square(20)
Uso de clases como componentes

 Declarar la clase como pública


 Referenciar e importar el ensamblado en código cliente
Public
Public Class
Class Account
Account
Public
Public Sub Debit(ByVal
Sub Debit(ByVal AccountId
AccountId As
As Long,
Long, Amount
Amount As
As Double)
Double)
'Perform debit action
'Perform debit action
End
End Sub
Sub
Public
Public Sub
Sub Credit(ByVal
Credit(ByVal AccountId
AccountId As
As Long,
Long, Amount
Amount As
As Double)
Double)
'Perform credit action
'Perform credit action
End
End Sub
Sub
End Class
End Class
  
'Client
'Client code
code
Imports
Imports MyAssembly
MyAssembly
Dim
Dim xx As
As New
New Account(
Account( ))
x.Debit(1021,
x.Debit(1021, 1000)
1000)
Uso de componentes en aplicaciones cliente no gestionadas

 Establecer las propiedades del ensamblado


 Generar un nombre seguro
 Seleccionar Registrar para COM Interop en las opciones
de Generar
 Exponer miembros de claes a COM y a los servicios de
componentes
 Definir e implementar interfaces
 Utilizar el atributo ClassInterface con valor AutoDual
 Utilizar el atributo COMClass
Descripción de .NET Remoting
Cliente AppDomain Servidor AppDomain
Marshal By Reference
Código
cliente
Formateador
Formateador
Servidor
Proxy Canal
Objeto
servidor
Marshal By Value
Código
cliente Formateador Canal
Copia Canal
objeto
servidor

Límite de Remoting
 Creación de componentes con servicio

 Hospedar componentes en los servicios de componentes


 Uso de transacciones
 Uso de la agrupación de objetos
 Uso de cadenas de constructor
 Uso de seguridad
 Uso de otros servicios de componentes
 Configurar ensamblados para usar los servicios de
componentes
Hospedar componentes en los servicios de componentes

 Agregar una referencia a System.EnterpriseServices en el


ensamblado
 El espacio de nombres System.EnterpriseServices
proporciona:
 Clase ContextUtil
 Clase ServicedComponent
 Atributos de ensamblado, clase y método
Uso de transacciones

 El atributo Transaction especifica cómo participa una clase en las


transacciones
 La clase ContextUtil proporciona votación en una transacción
 El atributo AutoComplete impide el uso de los métodos SetAbort,
SetComplete y ContextUtil
<Transaction(TransactionOption.Required)>
<Transaction(TransactionOption.Required)> Public
Public Class
Class Account
Account
Inherits ServicedComponent
Inherits ServicedComponent
Public
Public Sub
Sub Debit(...)
Debit(...)
'Perform
'Perform debit
debit action
action
ContextUtil.SetComplete(
ContextUtil.SetComplete( ))
End
End Sub
Sub
<AutoComplete(
<AutoComplete( )>)> Public
Public Sub
Sub Credit(...)
Credit(...)
'Perform credit action
'Perform credit action
'No
'No SetComplete
SetComplete because
because AutoComplete
AutoComplete is
is on
on
End
End Sub
Sub
End
End Class
Class
Uso de la agrupación de objetos

 La agrupación de objetos permite crear objetos con


antelación
 El atributo ObjectPooling especifica MinPoolSize y
MaxPoolSize
 ServicedComponent proporciona el método CanBePooled

<ObjectPooling(Enabled:=True,
<ObjectPooling(Enabled:=True, MinPoolSize:=5,
MinPoolSize:=5, __
MaxPoolSize:=50)>
MaxPoolSize:=50)> __
Public
Public Class
Class Account
Account
Inherits
Inherits ServicedComponent
ServicedComponent
...
...
Protected
Protected Overrides
Overrides Function
Function CanBePooled(
CanBePooled( )) As
As Boolean
Boolean
Return
Return True
True
End Function
End Function
End
End Class
Class
Uso de las cadenas de constructor

 Especifican el atributo ConstructionEnabled para indicar que


se necesita una cadena de constructor
 Reemplazan el método Construct para recuperar
información

<ConstructionEnabled(True)>Public
<ConstructionEnabled(True)>Public Class
Class Account
Account
Inherits
Inherits ServicedComponent
ServicedComponent
Protected
Protected Overrides
Overrides Sub
Sub Construct(ByVal
Construct(ByVal ss As
As String)
String)
''Called
Called after
after class
class constructor
constructor
''Use
Use passed
passed in
in string
string
End
End Sub
Sub
End
End Class
Class
Uso de seguridad

 Los atributos de la configuración de seguridad habilitan la


configuración de la seguridad y su papel
 La clase SecurityCallContext proporciona comprobación de
roles y ofrece información sobre el llamador

<ComponentAccessControl(True),
<ComponentAccessControl(True), seguridadRole("Manager")>
seguridadRole("Manager")> __
Public
Public Class
Class Account
Account
Inherits ServicedComponent
Inherits ServicedComponent
Public
Public Function
Function GetDetails(
GetDetails( )) As
As String
String
With seguridadCallContext.CurrentCall
With seguridadCallContext.CurrentCall
If
If .IsCallerInRole("Manager")
.IsCallerInRole("Manager") Then
Then
Return
Return .OriginalCaller.AccountName
.OriginalCaller.AccountName
End If
End If
End With
End With
End Function
End Function
End
End Class
Class
Uso de otros servicios de componentes

 Otros servicios de componentes incluyen:


 Activación Just-in-time
 Componentes encolados
 Propiedades compartidas
 Sincronización
Configurar ensamblados para usar los servicios de
componentes
 Establecer atributos a nivel de ensamblado
 ApplicationName
 Description
 ApplicationActivation: biblitoteca o aplícación servidora
 AssemblyKeyFile
 Uso de Regsvcs para registrar y crear aplicaciones de servicios de
componentes
 Regsvcs.exe myApplication.dll
 Uso de Lazy Registration
 Aplicación registrada la primera vez que se utilice por parte de un
cliente
Demostración: Creación de un componente con servicio
 Creación de clases de componentes

 Arquitectura de una clase de componentes


 Creación de una clase de componentes
Arquitectura de una clase de componentes

s e
b a
s e System.ComponentModel.Component
Cl a

Interfaz
IComponent

s Clases de componentes
s e das Clases predefinidas
l a
C riva
de Clases personalizadas
Creación de una clase de componentes

1. Heredar de System.ComponentModel.Component
 Realizar las inicializaciones por parte del constructor
 Sobrecargar el método Dispose
2. Agregar los componentes ubicados
 Utilizar elementos del Explorador de servidores o del
cuadro de herramientas
3. Crear la funcionalidad requerida
 Propiedades, métodos y eventos
4. Generar el ensamblado
Demostración: Creación de un componente Stopwatch
Creación de controles de formularios Windows Forms

 Heredar de la clase UserControl


 Heredar de un control existente Windows Forms
 Proporcionar atributos a los controles
Heredar de la clase UserControl

 Heredar de System.Windows.Forms.UserControl
 Agregar los controles necesarios al diseñador
 Agregar propiedades y métodos que correspondan a los de
los controles constitutivos
 Agregar propiedades y métodos adicionales
 No InitProperties, ReadProperties ni WriteProperties
 El almacenamiento de propiedades es automático
Heredar de un control existente Windows Forms

 Permite mejorar la versión de un determinado control


 Heredar de un control System.Windows.Forms

Public
Public Class
Class MyTextBox
MyTextBox
Inherits System.Windows.Forms.TextBox
Inherits System.Windows.Forms.TextBox
Private
Private strData
strData As
As String
String
Public
Public Property
Property HiddenData(
HiddenData( )) As
As String
String
Get
Get
Return
Return strData
strData
End Get
End Get
Set(ByVal
Set(ByVal Value
Value AsAs String)
String)
strData = Value
strData = Value
End Set
End Set
End Property
End Property
...
...
End
End Class
Class
Proporcionar atributos a los controles
 System.ComponentModel proprociona atributos a los
controles
 A nivel de clase: DefaultProperty, DefaultEvent,
ToolboxBitmap
 A nivel de propiedad: Category, Description, DefaultValue
Imports
Imports System.ComponentModel
System.ComponentModel
<ToolboxBitmap("C:\txticon.ico"),
<ToolboxBitmap("C:\txticon.ico"), DefaultEvent("Click")>
DefaultEvent("Click")> __
Public
Public Class
Class MyTextBox
MyTextBox
Inherits System.Windows.Forms.UserControl
Inherits System.Windows.Forms.UserControl
<Category("Appearance"),
<Category("Appearance"), __
Description("Stores
Description("Stores extra
extra data"),
data"), __
DefaultValue("Empty")>
DefaultValue("Empty")> __
Public
Public Property
Property HiddenData(
HiddenData( )) As
As String
String
...
...
End Property
End Property
...
...
End Class
End Class
Demostración: Creación de una caja de texto mejorada
Manejo de hilos de ejecución

 ¿Qué es un hilo?
 Ventajas de múltiples hilos de ejecución
 Creación de hilos
 Uso de hilos
 Cuándo utilizar el manejo de hilos
¿Qué es un hilo?

 La unidad de ejecución que procesa la CPU


 Todos los procesos de una aplicación contienen al menos un hilo
 Los hilos están planificados
 Parece que el equipo realiza varias tareas a la vez
 Cada hilo contiene su propia pila de llamadas y almacenamiento

Programador de subprocesos
Subproc.1
Proceso 1 Subproc. 321
CPU
Subproc. 2
Proceso 2
Subproc. 3
Ventajas de múltiples hilos de ejecución

 Mejor respuesta de la interfaz de usuario


 Ejemplo: barra de estado
 Sin bloqueos
 Comunicación asíncrona
 Sin afinidad de hilos
 Los objetos no están vinculados a un hilo
Creación de hilos

 Uso de la clase System.Threading.Thread


 El constructor especifica el método delegado
 Los métodos proporcionan control del procesamiento de
hilos
 Las propiedades proporcionan información de estado y
prioridades
 Utilizar una clase si se requieren parámetros
 Permitir acceso público a variables clase
 Lanzar un evento cuando finalice
Uso de hilos
Class
Class Calculate
Calculate
Public
Public iValue
iValue As
As Integer
Integer
Public
Public Event Complete(ByVal Result
Event Complete(ByVal Result As
As Integer)
Integer)
Public Sub LongCalculation(
Public Sub LongCalculation( ) )
'Perform
'Perform aa long
long calculation
calculation based
based on
on iValue
iValue
...
...
RaiseEvent
RaiseEvent Complete(iResult)
Complete(iResult) 'Raise
'Raise event
event to
to signal
signal finish
finish
End Sub
End Sub
End
End Class
Class

Sub
Sub Test(
Test( ))
Dim
Dim calc
calc AsAs New
New Calculate(
Calculate( ))
Dim
Dim th
th As
As New
New Threading.Thread(AddressOf
Threading.Thread(AddressOf calc.LongCalculation)
calc.LongCalculation)
calc.iValue
calc.iValue == 10
10
AddHandler
AddHandler calc.Complete, AddressOf
calc.Complete, AddressOf CalcResult
CalcResult
th.Start(
th.Start( ))
End
End Sub
Sub
Sub
Sub CalcResult(ByVal
CalcResult(ByVal Result
Result As
As Integer)
Integer)
...
...
End
End Sub
Sub
Cuándo utilizar el manejo de hilos
 Utilizar los hilos con precaución
 El uso de más hilos requiere más recursos del sistema
 Sincronizar el acceso a recursos compartidos
 Evitar que dos hilos accedan simultáneamente a datos
compartidos
 Utilizar la instrucción SyncLock para bloquear secciones
de código

Sub
Sub Worker(
Worker( ))
SyncLock(theData)
SyncLock(theData) 'Lock
'Lock this
this object
object variable
variable
theData.id = iValue
theData.id = iValue
'Perform
'Perform some
some lengthy
lengthy action
action
iValue
iValue == theData.id
theData.id
End SyncLock
End SyncLock 'Unlock
'Unlock the
the object
object variable
variable
End Sub
End Sub
Demostración: Uso de la instrucción SyncLock

También podría gustarte