• Domingo 22 de Diciembre de 2024, 20:56

Autor Tema:  Duda con NAMESPACE  (Leído 3150 veces)

todotnet

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Duda con NAMESPACE
« en: Martes 14 de Febrero de 2012, 22:35 »
0
Hola buenas,
estoy creando una clase para usarla en diferentes aplicaciones.

El fichero .cs tiene esta forma
Código: [Seleccionar]
using System;

namespace Psharp
{
   public class Psharp
   {
       public static void tconect(String cv, String av)
       {
           ...
       }
       ...+código del programa
   }
}

Bien, mi pregunta es esta, cuando genero el dll y lo agrego como referencia en otro proyecto, para poder llamar al método tconect
hago lo siguiente
Código: [Seleccionar]
using Psharp;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page   
    {
              protected void Page_Load(object sender, EventArgs e)
              {
                    Psharp.Psharp.tconect("a","b");

 No entiendo porque tengo que poner el primer Psharp, no se supone que al incluirlo con el using ya debería acceder directamente a la clase?
Yo lo que quiero es poner sólo Psharp.tconect("a","b");

Las dos maneras que se me han ocurrido han sido agregando dentro del namespace WebApplication1 el using Psharp, pero esta manera no me gusta.
Y la otra es quitarle a la clase el namespace Psharp y dejar sólo la clase. Pero esto no se si es del todo correto.

¿Qué me aconsejais?¿De qué otra manera puedo realizarlo?


Un saludo y gracias por la ayuda.







gabio2

  • Miembro MUY activo
  • ***
  • Mensajes: 402
  • Nacionalidad: mx
    • Ver Perfil
Re:Duda con NAMESPACE
« Respuesta #1 en: Martes 14 de Febrero de 2012, 23:56 »
0
Primero limpia tú solución (clic derecho sobre tú solución, Limpiar Solución) y luego Regeneras la solución.

Yo te recomendaria crear un objeto de tú clase PSharp

Código: C#
  1.    Psharp _psharp = new Psharp();
  2.  
  3.   protected void Page_Load(object sender, EventArgs e)
  4.               {
  5.                     _psharp.tconect("a","b");
  6.  

Saludos! :)
@gabio87

caperutxa

  • Miembro activo
  • **
  • Mensajes: 40
  • Nacionalidad: 00
    • Ver Perfil
Re:Duda con NAMESPACE
« Respuesta #2 en: Miércoles 15 de Febrero de 2012, 11:02 »
0
Pero si creas el objeto, ¿no te estás alejando del objetivo de usar tus propias librerías y API's?
Si quieres obtener resultados diferentes no hagas siempre lo mismo.


gabio2

  • Miembro MUY activo
  • ***
  • Mensajes: 402
  • Nacionalidad: mx
    • Ver Perfil
Re:Duda con NAMESPACE
« Respuesta #3 en: Miércoles 15 de Febrero de 2012, 16:07 »
0
Estás creando un objeto de tú clase, cuando trabajas con clases (programación por capas o similares), siempre es mejor crear un objeto de las clases que vayas a usar, lo mismo sucede con los WebService, etc... no veo en que sentido me alejo del objetivo.. o mejor dicho, para tí ¿cuál es el objetivo de usar  tus propias librerias?..
@gabio87

todotnet

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re:Duda con NAMESPACE
« Respuesta #4 en: Miércoles 15 de Febrero de 2012, 20:06 »
0
Antes de nada, agradeceros la ayuda.

El caso es que no quiero que se instancie la clase, solamente usar ese método.
Pero estoy trabajando con Visual Studio 2008, y al crear una Clase, me crea un código por defecto, y me agrega unos using y namespace por defecto.

Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace PSharp
{
    public class Class1
    {
    }
}

y mi pregunta es si puedo quitar ese namespace aunque esta clase vaya a usarla en otros proyectos. Ya que me surgió la duda, cuando agregué la referencia en otro proyecto. Y al poner using PSharp;
En el código para llamar al método tconect tenía que poner:

Código: [Seleccionar]
Psharp.Psharp.tconect("a","b");
Y yo lo que quiero es llamar al método tconect sin tener que poner el primer PSharp
Código: [Seleccionar]
Psharp.tconect("a","b");
PD:
Citar
Primero limpia tú solución (clic derecho sobre tú solución, Limpiar Solución) y luego Regeneras la solución.

Yo te recomendaria crear un objeto de tú clase PSharp

Lo hice pero al volver a  añadir el using PSharp, sucede lo mismo. El problema es el namespace, ¿este se pondría sólo si tengo varias clases dentro del mismo proyecto no?

al poner en el código PSharp ( primero me pone el namespace ) . PSharp ( la clase ) . tconect ( método).

Un Saludo y  :gracias:

caperutxa

  • Miembro activo
  • **
  • Mensajes: 40
  • Nacionalidad: 00
    • Ver Perfil
Re:Duda con NAMESPACE
« Respuesta #5 en: Jueves 16 de Febrero de 2012, 07:31 »
0
Busca en la documentación sobre la llamadas a métodos de otros namespace. Pudiera ser que el using sólo indicara donde tiene que buscar, pero al ser un método definido por el usuario, el compilador necesitase la llamada explícita. Yo buscaría en la documentación sobre la directiva using y las definiciones de namespaces propios.

Citar
Estás creando un objeto de tú clase, cuando trabajas con clases (programación por capas o similares), siempre es mejor crear un objeto de las clases que vayas a usar, lo mismo sucede con los WebService, etc... no veo en que sentido me alejo del objetivo.. o mejor dicho, para tí ¿cuál es el objetivo de usar  tus propias librerias?...
Precisamente el objetivo es no tener que instanciar la clase para poder acceder a los métodos, sino decirle al compilador donde puede encontrar ese método y hacer uso de él. Lo que serían las librerías System, por ejemplo.
Si quieres obtener resultados diferentes no hagas siempre lo mismo.


Sined99

  • Miembro activo
  • **
  • Mensajes: 56
    • Ver Perfil
Re:Duda con NAMESPACE
« Respuesta #6 en: Martes 28 de Febrero de 2012, 12:42 »
0
Hola,

Tu cuando escribes por ejemplo:
Código: [Seleccionar]
using System.drawing;

Si quieres usar un objeto Pen, tienes que instanciarlo....
Código: [Seleccionar]
Pen pen=new Pen(Color.Black,2);

juanchoweb

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:Duda con NAMESPACE
« Respuesta #7 en: Jueves 1 de Marzo de 2012, 20:02 »
0
Los metodos marcados como static no necesitan de una instancia para poder ejecutarlos es decir algo como esto ->

MiClase obj= new MiClase(); //no es necesario si el metodo que necesitas es static
MiClase.Suma(1,2); //Accediendo al metodo static ;)

Código: [Seleccionar]

public class MiClase
{
  public static int Suma(int n1, int n2)
 {
      return n1 + n2;
 }
}


Me entro la curiosidad sobre el por qué tienes ese problema y realicé el ejercicio y el problema surgió cuando la clase tiene el mismo nombre que el namespace.


Al cambiar el nombre de la clase y el nombre del archivo .cs  todo funcionó perfectamente.

PD. Adjunto la libreria con el metodo statico para que la importes al proyecto
Espero que comentes si el problema.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.