Pasar codigo de C# a VB.NET

10/12/2003 - 10:35 por Eduardo Robles | Informe spam
Para pasar un codigo de C# a VB.NET no se si lo hago bien

'-

El código en C# es

'-

public class ClaseBase

{

protected string m_sProovedor = "Microsoft.Jet.OLEDB.4.0";

public virtual DataSet GetData()

{

m_oDS = new DataSet();

m_oDA.Fill(m_oDS, m_sClassName);

return m_oDS;

}

}

public class LaqueHereda1: ClaseBase

{

//--
-

// Class Constructor (zero arguments)

//--
-

public LaqueHereda1()

{

m_sClassName = "LaqueHereda1";

m_oDA = new SqlDataAdapter();


}



public class LaqueHereda2: ClaseBase

{

LaqueHereda1 m_ozonas = null;

}

public LaqueHereda2()

{

m_ozonas = new LaqueHereda1();

}





'--

' Si traduzco el codigo de C# a Visual Basic . NET

' ¿ Debe quedar asi ?

'--



namespace miespacio


Public Class ClaseBase

Protected m_sProovedor As String = "Microsoft.Jet.OLEDB.4.0"

Public Overridable Function getdata() As DataSet

m_oDS = New DataSet()

m_oDA.Fill(m_oDS, m_sClassName)

getdata = m_oDS

End Function

End Class







Public Class LaqueHereda1

Inherits ClaseBase

Sub New()

m_sClassName = "LaqueHereda1"

Dim m_oDA = New OleDbDataAdapter()

End Sub

End Class

Public Class LaqueHereda2

Inherits ClaseBase

Dim m_ozonas As LaqueHereda1= Nothing

Sub New()

m_ozonas = New LaqueHereda1()

End Sub

End Class

End Namespace





Al crear una instancia de LaqueHereda2 con

Dim oTree As miespacio.LaqueHereda2= New miespacio.LaqueHereda2()

en C# hace una cosa y en VB otra

Me explico : si depuro linea a linea veo que C# antes de llamar al
constructor lee la linea que crea la variable

LaqueHereda1 m_ozonas = null;

PERO en cambio el VB no pasa por ella y se va directamente al constructor

NO ENTIENDO POR QUE PASA ESTO

Es decir si el C# instancia una clase antes de llamar a su constructor
inicializa sus variables pero en VB no pasa eso ??

Preguntas similare

Leer las respuestas

#1 A.Poblacion
11/12/2003 - 19:17 | Informe spam
Hay una diferencia entre C# y VB:
En C# el constructor de una clase hija llama automáticamente al constructor
de la clase madre, mientras que en VB tienes que codificarlo expresamente
poniendo MyBase.New() dentro del constructor de la clase hija. Creo que eso
es lo que te está pasando.



"Eduardo Robles" wrote in message
news:udL$
Para pasar un codigo de C# a VB.NET no se si lo hago bien

'-

El código en C# es

'-

public class ClaseBase

{

protected string m_sProovedor = "Microsoft.Jet.OLEDB.4.0";

public virtual DataSet GetData()

{

m_oDS = new DataSet();

m_oDA.Fill(m_oDS, m_sClassName);

return m_oDS;

}

}

public class LaqueHereda1: ClaseBase

{




//--
-

// Class Constructor (zero arguments)




//--
-

public LaqueHereda1()

{

m_sClassName = "LaqueHereda1";

m_oDA = new SqlDataAdapter();


}



public class LaqueHereda2: ClaseBase

{

LaqueHereda1 m_ozonas = null;

}

public LaqueHereda2()

{

m_ozonas = new LaqueHereda1();

}





'--

' Si traduzco el codigo de C# a Visual Basic . NET

' ¿ Debe quedar asi ?

'--



namespace miespacio


Public Class ClaseBase

Protected m_sProovedor As String = "Microsoft.Jet.OLEDB.4.0"

Public Overridable Function getdata() As DataSet

m_oDS = New DataSet()

m_oDA.Fill(m_oDS, m_sClassName)

getdata = m_oDS

End Function

End Class







Public Class LaqueHereda1

Inherits ClaseBase

Sub New()

m_sClassName = "LaqueHereda1"

Dim m_oDA = New OleDbDataAdapter()

End Sub

End Class

Public Class LaqueHereda2

Inherits ClaseBase

Dim m_ozonas As LaqueHereda1= Nothing

Sub New()

m_ozonas = New LaqueHereda1()

End Sub

End Class

End Namespace





Al crear una instancia de LaqueHereda2 con

Dim oTree As miespacio.LaqueHereda2= New miespacio.LaqueHereda2()

en C# hace una cosa y en VB otra

Me explico : si depuro linea a linea veo que C# antes de llamar al
constructor lee la linea que crea la variable

LaqueHereda1 m_ozonas = null;

PERO en cambio el VB no pasa por ella y se va directamente al constructor

NO ENTIENDO POR QUE PASA ESTO

Es decir si el C# instancia una clase antes de llamar a su constructor
inicializa sus variables pero en VB no pasa eso ??





Respuesta Responder a este mensaje
#2 Eduardo Robles
12/12/2003 - 08:57 | Informe spam
Ese no es el problema. El problema es que no se inicializan las variables
(de las clases que heredan) que hay justo antes de su propio constructor.
O sea , en C#

si declaro una variable de una clase que hereda (por ejemplo Laquehereda2)
con la siguiente sentencia:
Dim miespaciodenombres.laquehereda2 = new miespaciodenombres.laquehereda2

Se comporta de forma normal , es decir pasa por la linea que pone
"LaqueHereda1 m_ozonas = null;" y luego va al constructor "public
CultivosZona()"

En cambio si uso VB.NET no pasa por la linea que pone "Dim m_ozonas As
LaqueHereda1= Nothing
"
Se va directamente al constructor Sub New()

Por cierto en los dos codigos al llamar al constructor de la clase que
hereda directamente se van al constructor de la clase base ( luego no hace
falta usar Mybase.new())

De todas formas algo tiene que estar mal. De momento he pasado el codigo a
C# y parece ya que quiere funcionar (no he tenido tiempo de revisarlo del
todo)

Saludos A.poblacion y gracias
Respuesta Responder a este mensaje
#3 Guillermo guille
15/12/2003 - 15:23 | Informe spam
hola,

En VB todas las variables están inicializadas aunque no se indique
expresamente.
Puede ser que esa sea la causa de que no "pase" por esa línea de código, ya que
el valor "predeterminado" de un objeto es Nothing, por tanto para el compilador
puede que no tenga sentido asignar Nothing cuando se "sabe" que ya tiene ese
valor.
De todas formas, cuando se llama a otro constructor desde un constructor, esa
debe ser la primera línea que se ejecuta, por tanto para el compilador la línea
que asigna el valor a la variable al declararla puede que no la "quiera"
ejecutar antes de llamar al otro constructor...

Y sí, en VB también se llama a los constructores sin parámetros de forma
explícita.
Es más, si una clase base no tiene un constructor público sin parámetros, desde
la clase derivada habrá que llamar a un constructor "accesible" de forma
explícita.

Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Te invito a mi sitio dedicado al VB y más...
http://www.elguille.info/ (en construcción)
http://www.mundoprogramacion.com/
(puede que el correo usado sea anti-spam)


"Eduardo Robles" wrote in message
news:%
Ese no es el problema. El problema es que no se inicializan las variables
(de las clases que heredan) que hay justo antes de su propio constructor.
O sea , en C#

si declaro una variable de una clase que hereda (por ejemplo Laquehereda2)
con la siguiente sentencia:
Dim miespaciodenombres.laquehereda2 = new miespaciodenombres.laquehereda2

Se comporta de forma normal , es decir pasa por la linea que pone
"LaqueHereda1 m_ozonas = null;" y luego va al constructor "public
CultivosZona()"

En cambio si uso VB.NET no pasa por la linea que pone "Dim m_ozonas As
LaqueHereda1= Nothing
"
Se va directamente al constructor Sub New()

Por cierto en los dos codigos al llamar al constructor de la clase que
hereda directamente se van al constructor de la clase base ( luego no hace
falta usar Mybase.new())

De todas formas algo tiene que estar mal. De momento he pasado el codigo a
C# y parece ya que quiere funcionar (no he tenido tiempo de revisarlo del
todo)

Saludos A.poblacion y gracias


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