none
Pregunta al migrar proyecto de VB.NET a C# RRS feed

  • Pregunta

  • Hola, tengo un proyecto en Vb que estoy queriendo pasar a C#, para aprender mas que nada.

    Mi proyecto cuenta con cuatro subproyectos: Entidades, Datos, Negocio y Presentación. Me acostumbré en vb a simplemente escribir NombreSubproyecto.NombreNuevaClase.NombreNuevoMetodo y que el VS me "ofrezca" crear la nueva clase y rellenar el codigo para agregar la nueva clase en el proyecto existente y luego el método. 

    La pregunta es: C# no me da esa opcion al error "El tipo o el nombre del espacio de nombres 'NegocioProvincia' no existe en el espacio de nombres 'Negocio' (¿falta una referencia de ensamblado?)" (siendo NegocioProvincia la nueva clase a agregar al Subproyecto Negocio)

    Quiero saber si es que no existe esta "ayuda" en C# o estoy haciendo algo mal, si no existe la extrañaré mucho porque simplificaba el diseño en capas.

    Desde ya muchas gracias 

    jueves, 21 de abril de 2011 17:56

Respuestas

  • bien algo que noto es que no estas creando una instancia de la clase NegocioProvincia, imagino que esta es la clase que ahs creado

    algo como esto

     private void ListarProvincias(){

        NegocioProvincia negProv = new NegocioProvincia();

        List<Provincia> l = negProv.ListarProvincias();

        dgvListarProvincias.DataSource= l;

    }

     

    por supuesto en la parte superior del formulario declara el

    using Negocio;

    o sino

    using GestionDeRemitos.Negocio;

    depedne de como hayas declarado los namespaces donde estan las clases

     

    si quieres no crear instancias recuera definirlas como static

    public static class NegocioProvincia{

        public static List<Provincia> ListarProvincias(){

          ...

        }

    }

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 21 de abril de 2011 21:30

Todas las respuestas

  • hola

    para hacer un pasaje rapido podrias ayudarte de esta tool

     

    SharpDevelop

    es un ide open source con opciones para convertir un proyecto completo de un lenguaje a otro en un click, por ahi podria ayudar a convertir tu codigo y analizarlo

     

    recuerda que en c# tiene el concepto de namspaces en vb.net tambiene sta pero al mayoria de als veces esta oculto y no se define

    una consulta defines estas clase en otroa proyecto separados ? porque si lo ahces recuerda agregar la referncia entre ellos, sino no podras usar la funcionalidad

     

    Add References

    luego define el using para hacer mas simple el acceso a las clases

    o sea por fuera de la clase donde quieres usar a NegocioProvincia, deberias declarar

    using NombreNamespace

     

    ademas veo que mencioans Subproyecto Negocio, que es un subproyecto este concepto hasta donde se no existe, hay proyectos y namespaces para ordenar el codigo dentro del proyecto

    pero un proyecto dentro de otro no se puede poner

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 21 de abril de 2011 18:28
  • Hola Leandro, gracias por tu pronta respuesta.

    Te cuento, yo en VS selecciono nuevo proyecto vacío con un nombre GestionDeRemitos, con lo cual me genera una solución con el mismo nombre, y dentro de ella un "proyecto" tambien con el mismo nombre. Después a esa Solución le agrego tres proyectos Datos, Negocio y Entidades (todos proyectos C# vacíos), les agrego clases (Datos.Provincia, Negocio.Provincia y Entidades.Provincia). 

    En el proyecto GestiónDeRemitos (al cual renombré como Presentacion) agrego un Form (frmProvincia) y agrego un textbox (txtProvincia), un boton (btnGuardarProvincia), y un DataGridView  (dgvListaProvincias).

    Hasta aquí hice todo igual que en VB, luego defino mi entidad Provincia, y en el frmProvincia:

     

     

            private void ListarProvincias()

            {

                List <Provincia> l = new List <Provincia>;

                l=Negocio.NegocioProvincia.ListarProvincias();

                dgvListarProvincias.DataSource= l;

            }

     

    Las referencias ya las hice desde el Menu Proyecto -> Agregar Referencia.

    Lo que falla es la opción de correccion que genera una nueva clase (que en VB me ayudaba bastante) en Negocio. Si la creo yo a la clase, la opción de correción de código me ofrece generar nuevo método con el nombre ListarProvincias como a mi me gusta.

    No es un gran problema, es solo un funcionalidad que me gustaría tener en C# como la tenía en VB y no se como hacerlo ni si está en C#.

    Nuevamente agradezco la ayuda


    jueves, 21 de abril de 2011 21:17
  • bien algo que noto es que no estas creando una instancia de la clase NegocioProvincia, imagino que esta es la clase que ahs creado

    algo como esto

     private void ListarProvincias(){

        NegocioProvincia negProv = new NegocioProvincia();

        List<Provincia> l = negProv.ListarProvincias();

        dgvListarProvincias.DataSource= l;

    }

     

    por supuesto en la parte superior del formulario declara el

    using Negocio;

    o sino

    using GestionDeRemitos.Negocio;

    depedne de como hayas declarado los namespaces donde estan las clases

     

    si quieres no crear instancias recuera definirlas como static

    public static class NegocioProvincia{

        public static List<Provincia> ListarProvincias(){

          ...

        }

    }

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 21 de abril de 2011 21:30
  • Otra vez gracias por contestar tan rápido, hago lo que me decís, y no tengo problemas con la generación de código automática para el método, lo que quería saber es si puede darme la opción de crear una nueva clase en ese namespace. Aparentemente en C# no tiene esa opción a corrección de errores.

     

    Muchísimas gracias por tu tiempo Leandro.

    viernes, 22 de abril de 2011 0:24
  • hola

    puedes crear tantas clases como quieras en el namespace

    namespace GestionDeRemitos{

       public class NegocioProvincia{

       }

       public class NegocioSucursales{

       }

    }

     

    igual no recomendaria que pongas logica de negocio en un mismo .cs

    puedes crear dos y usa

    ProviciaNegocio.cs

    namespace GestionDeRemitos{

       public class NegocioProvincia{

       }

    }

     

    y luego

    SucursalNegocio.cs

    namespace GestionDeRemitos{

       public class NegocioSucursales{

       }

    }

    como veras wel namespace es el mismo pero estan en dos archivos

     

    Aparentemente en C# no tiene esa opción a corrección de errores.

    esta parte no la entendi, correccion de que erreres hace referencia

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 22 de abril de 2011 1:21
  • Hola denuevo, con corrección de errores, me refiero a cuando vs subraya un error de sintaxis y te ofrece generar el código de forma automática. Supongamos, en vb, dentro del namespace Presentacion , en una clase, escribo , por ejemplo

        Private Sub CargarGrillaProvincias()

            'instancio un list para las provincias

            Dim listaProvincias As List(Of Provincia)

            'recibo la lista de la capa de negocios

            listaProvincias = NegocioProvincia.ArmarLista()

            ' le asigno la lista como datasource a la grilla

            Me.dgvListaProvincias.DataSource = listaProvincias

    End Sub

    Habiendo hecho las referencias y declarando los imports.

    La opción de correccion de errores despliega un menu que dice:

    'NegocioProvincia' no está declarado. Puede que esté inaccesible debido a su nivel de protección.

    y da las siguientes opciones :

    Generar código auxiliar de método para 'NegocioProvincia' en 'Presentacion.frmProvincia'

    Generar código auxiliar de propiedad para 'NegocioProvincia' en 'Precentacion.frmProvincia'

    Generar campo para 'NegocioProvincia' en 'Presentacion.frmProvincia'

    Generar 'Class NegocioProvincia'

    Generar nuevo tipo ...

     

    y es Generar nuevo tipo... la opción que me permite seleccionar otro namespace (Negocio) y crear la clase NegocioProvincia alli, luego de lo cual me ofrece generar codigo de método en dicha clase recién creada.

     En cambio en C# lo único que hace es mostrarme el error "El tipo o el nombre del espacio de nombres 'NegocioProvincia' no existe en el espacio de nombres 'Negocio' (¿falta una referencia de ensamblado?).

    Si creo la clase NegocioProvincia dentro del namespace Negocio, me desmarca como error NegocioProvincia (en el fragmento de codigo donde dice Negocio.NegocioProvincia.MostrarListaProvincias) y me ofrece como correccion de error (el error ahora es que no existe el método)  crear el método MostrarListaProvincias.

    Muchas gracias por tu tiempo, no quiero insistir demasiado en una funcionalidad tan pequeña, pero me acostumbré a ella y quiero saber si no existe en c# o estoy haciendo algo mal. Por ahora creo las clases yo.

    viernes, 22 de abril de 2011 16:06