IComponent

21/03/2006 - 05:35 por hugo | Informe spam
Hola Grupo:

Estoy haciendo unas clases como cliente, articulo, etc. Funcionan como
orígenes de datos en tiempo de ejecución. Lei que para enlazar en tiempo de
diseño deben implementar la interface IComponent. Busque en internet y todos
los ejemplos heredan la clase Component (la cual implementa dicha
interface).
El problema que tengo es que no puedo heredar esa clase porque mis objetos
(cliente, articulo) ya están heredando una clase llamada entidad y como
saben .net no soporta herencia múltiple.
Algúién sabe cómo implementar IComponent???
Me pueden dar una mano!!!!!!
Gracias y saludos.

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
21/03/2006 - 07:34 | Informe spam
El problema que tengo es que no puedo heredar esa clase porque mis
objetos (cliente, articulo) ya están heredando una clase llamada
entidad y como saben .net no soporta herencia múltiple.



¿Y no puedes hacer que "entidad" herede de Component? Seria la solucion mas
simple. Si por algun motivo no puedes, la segunda opcion seria implementar
IComponent en "entidad" porque no le veo mucha practicidad implementarlo en
cada clase heredada de "entidad".

Algúién sabe cómo implementar IComponent???



Es una interface bastante simple de implementar.

Public Class MiComponente
Implements IComponent

Public Event Disposed(ByVal sender As Object, ByVal e As
System.EventArgs) _
Implements System.ComponentModel.IComponent.Disposed

Private _disposed As Boolean = False
Private _site As ISite

<Browsable(False)> _
Public Property Site() As System.ComponentModel.ISite Implements
System.ComponentModel.IComponent.Site
Get
Return _site
End Get
Set(ByVal value As System.ComponentModel.ISite)
_site = value
End Set
End Property

Protected Overridable Sub Dispose(ByVal disposing As Boolean)

If Not _disposed Then

If disposing AndAlso _
Not _site Is Nothing AndAlso _
Not _site.Container Is Nothing Then

_site.Container.Remove(Me)

End If

End If

_disposed = True

RaiseEvent Disposed(Me, EventArgs.Empty)

End Sub

Public Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub

End Class

Site te permite acceder a informacion como el contenedor (Site.Container),
si es tiempo de diseño (Site.DesignMode) y el nombre dado al componente en
el diseñador (Site.Name).

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#2 hugo
21/03/2006 - 15:20 | Informe spam
Se paso por la cabeza hacerlo en entidad. Y si, es una posible solución.
Pasa que eso me obligaría a que una entidad sea si o si un componente y la
realidad es que no termina de gustarme.
Mi intemción, era hacer algo asi:

Una librería de clases para el acceso a datos

Otra Para la lógica, en esta capa estaría la clase entidad y las clases
derivadas como artículo, Cliente, etc

Otra capa que sirva para el enlace a la interface de usuario, en esta habría
por ejemplo una clase Artículo que herede de la clase artículo de la
librería anterior. No tendría nada de código de la lógica, solo le garega
codigo de enlace, y como me gustaría que una clase pueda enlazarse en tiempo
de diseño, de ahi viene o de iComponent

La interface de usuario.

La capa de enlace está separada del resto, para tener la libertad de poder
vincular los controles de la interface gráfica manualmnete. En ese caso no
usaría la capa de enlace, y en la interface gráfica directamnete utilizaría
la capa de lógica de negocío.
Asi lo tengo hecho y funciona todo barbaro si enlazo con código.
Obviamnete este diseño no se si estará bien en lo conceptual, son
bienvenidas todas las críticas que se deseen hacer.
Pruebo lo que me pasaste y vuelvo.
Gracias y saludos.


"Eduardo A. Morcillo [MS MVP VB]" <emorcillo .AT. mvps.org> escribió en el
mensaje news:
> El problema que tengo es que no puedo heredar esa clase porque mis
> objetos (cliente, articulo) ya están heredando una clase llamada
> entidad y como saben .net no soporta herencia múltiple.

¿Y no puedes hacer que "entidad" herede de Component? Seria la solucion


mas
simple. Si por algun motivo no puedes, la segunda opcion seria implementar
IComponent en "entidad" porque no le veo mucha practicidad implementarlo


en
cada clase heredada de "entidad".

> Algúién sabe cómo implementar IComponent???

Es una interface bastante simple de implementar.

Public Class MiComponente
Implements IComponent

Public Event Disposed(ByVal sender As Object, ByVal e As
System.EventArgs) _
Implements System.ComponentModel.IComponent.Disposed

Private _disposed As Boolean = False
Private _site As ISite

<Browsable(False)> _
Public Property Site() As System.ComponentModel.ISite Implements
System.ComponentModel.IComponent.Site
Get
Return _site
End Get
Set(ByVal value As System.ComponentModel.ISite)
_site = value
End Set
End Property

Protected Overridable Sub Dispose(ByVal disposing As Boolean)

If Not _disposed Then

If disposing AndAlso _
Not _site Is Nothing AndAlso _
Not _site.Container Is Nothing Then

_site.Container.Remove(Me)

End If

End If

_disposed = True

RaiseEvent Disposed(Me, EventArgs.Empty)

End Sub

Public Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub

End Class

Site te permite acceder a informacion como el contenedor (Site.Container),
si es tiempo de diseño (Site.DesignMode) y el nombre dado al componente en
el diseñador (Site.Name).

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo



http://mvp.support.microsoft.com/pr...4EF5A4191C


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida