Sigo intentando con el strict on y me encuentro con el siguiente problema.
De acuerdo a un ejemplo que me dio Eduardo Morcillo cree una clase base que
hereda de mi clase de negocios con un sólo método(getmovimientos) que es
común para todas las clases, luego hice que todas mis clases de usuario
hereden de dicha clase, puse en la clase base de formulario una variable con
el tipo de la clase base y una llamada al método de la clase base, en el
formulario heredado asigno dicha variable a la clase de usuario, pero en
lugar de ejectuar el método de dicha clase ejecuta el de la clase base ,
abajo extracte los fragmentos de código de las clases y del formulario.
Hasta ahora declaraba en el formulario base la variable buisobj como object
y en cada formulario la asignaba a la clase de usuario correspondiente y me
ejecutaba el método de dicha clase (getmovimientos)
Public MustInherit Class buisobj
Inherits BusinessObject
Public MustOverride Function getmovimientos(ByVal idclave As Object) As
DataSet
End Class
Public Class Proveedores
Inherits Business.buisobj
Public Sub New()
Me.TableName = "Proveedores"
Me.TablaPrimaria = "Proveedores"
End Sub
Protected Overloads Function Getmovimientos(ByVal lnIdProvee As Integer) As
DataSet
Return Me.GetDataSet("select * from " & Me.TableName & " where idprovee=" &
lnIdProvee.ToString)
End Function
End Class
Public Class Form1
Inherits System.Windows.Forms.Form
Public ds As New DataSet
Protected buisobj As Business.buisobj
sub buscar()
ds = buisobj.GetMovimientos(idtabla)
end sub
Public Class FrmProvee
Inherits Frombase.Form1
Dim ocondiva As New Condiva
Dim dscondiva As New DataSet
#Region " Código generado por el Diseñador de Windows Forms "
Public Sub New()
MyBase.New()
buisobj = New Proveedores
'El Diseñador de Windows Forms requiere esta llamada.
InitializeComponent()
'Agregar cualquier inicialización después de la llamada a
InitializeComponent()
End Sub
La forma correcta de hacerlo seria que las clases que guardas en la variable
Object implementen una misma interface o que hereden de una misma clase. En
esta interface o clase pondrias todo lo que sea comun y uses en el
formulario base. Luego en el formulario en lugar de declarar la variable
como object la declaras del tipo de la clase o interface. En los formularios
heredados haces un cast cuando necesites usar algun miembro de la clase
heredada (o puedes tener una referencia a nivel de clase). Un ejemplo:
Class Persona
Public Nombre As String
Public Apellido As String
End Class
Class Empleado
Inherits Persona
Public FechaDeIngreso As Date
Public Cargo As String
End Class
Class FormularioEdicionPersona
Inherits System.Windows.Forms.Form
Protected persona As Persona
' ...
Sub HacerAlgo()
persona.Nombre = txtNombre.Text
End Sub
End Class
Class FormularioEdicionEmpleado
Inherits FormularioEdicionPersona
Sub New() {
persona = New Empleado();
}
Sub HacerAlgoMas()
DirectCast(persona, Empleado).Cargo = txtCargo.Text
End Sub
End Class
Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Leer las respuestas