pregunta sobre la plataforma de desarrollo de .NET

Iniciado por Beginner Web, 18 Abril 2020, 18:18 PM

0 Miembros y 2 Visitantes están viendo este tema.

Beginner Web

Hola tengo una dudas sobre la creación de clases en C# con campos y atributos la estoy creando de esta forma y otra cosa cuando uso el refactorizador me pregunta si queiro crear las propieades y seguir usando campos o usar directamente las propiedades, infiere mucho eso en mi codigo?

Código (csharp) [Seleccionar]
public class Usuario
    {
        private int usu_Id;
        private string usu_NombreUsuario;
        private string usu_Contraseña;
        private string usu_ApellidoNombre;
        private string rol_Codigo;

        public int Usu_Id
        {
            get { return usu_Id; }
            set { usu_Id = value; }
        }
        public string Usu_NombreUsuario
        {
            get { return usu_NombreUsuario; }
            set { usu_NombreUsuario = value; }
        }
        public string Usu_Contraseña
        {
            get { return usu_Contraseña; }
            set { usu_Contraseña = value; }
        }
        public string Usu_ApellidoNombre
        {
            get { return usu_ApellidoNombre; }
            set { usu_ApellidoNombre = value; }
        }
        public string Rol_Codigo
        {
            get { return rol_Codigo; }
            set { rol_Codigo = value; }
        }

        public Usuario()
        {
        }

        public Usuario(int usu_Id, string usu_NombreUsuario, string usu_Contraseña, string usu_ApellidoNombre, string rol_Codigo)
        {
            this.usu_Id = usu_Id;
            this.usu_NombreUsuario = usu_NombreUsuario;
            this.usu_Contraseña = usu_Contraseña;
            this.usu_ApellidoNombre = usu_ApellidoNombre;
            this.rol_Codigo = rol_Codigo;
        }
    }


Por ultimo algunos atajos para crear constructor por defect y otros con parametros pero.. estos parametros modifican los campos o las propiedades? no entiendo bien eso y tambien me gustaria saber como generar las propiedades de forma automatica.  :laugh: ;-)
7w7

**Aincrad**

#1
1) No especificas bien que quieres hacer, la verdad no te entendi, veo una clase "Usuarios" en la cual hay variables y Propiedades del mismo nombre.

2) veo que tienes propiedades que son SET y GET y pasas el valor a una variable. me explico :

tienes la Propiedad :

Código (csharp) [Seleccionar]
public int Usu_Id
       {
           get { return usu_Id; }
           set { usu_Id = value; }
       }


esta Propiedad Pasa el valor a :

Código (csharp) [Seleccionar]
private int usu_Id;

de por si el nombre de estas dos son idénticos , eso no se hace.

Tienes 2 subs del mismo Nombre :

Código (csharp) [Seleccionar]
public Usuario()
       {
       }


y

Código (csharp) [Seleccionar]
public Usuario(int usu_Id, string usu_NombreUsuario, string usu_Contraseña, string usu_ApellidoNombre, string rol_Codigo)
       {
           this.usu_Id = usu_Id;
           this.usu_NombreUsuario = usu_NombreUsuario;
           this.usu_Contraseña = usu_Contraseña;
           this.usu_ApellidoNombre = usu_ApellidoNombre;
           this.rol_Codigo = rol_Codigo;
       }


De por si esta ultimo sub , hace la misma funcion que hacen las propiedades , Escribir y leer el contenido de la variable.

osea hay puro codigo que repite la misma funcion .

ademas de que no logro entender que quieres hacer.




Algo ordenado seria como esto :

Código (csharp) [Seleccionar]


public class UserHook
{
   private int _usu_Id = 0;
   private string _usu_NombreUsuario = string.Empty;
   private string _usu_Contraseña = string.Empty;
   private string _usu_ApellidoNombre = string.Empty;
   private string _rol_Codigo = string.Empty;



   public int Usu_Id
   {
       get
       {
           return _usu_Id;
       }
   }

   public string Usu_NombreUsuario
   {
       get
       {
           return _usu_NombreUsuario;
       }
   }

   public string Usu_Contraseña
   {
       get
       {
           return _usu_Contraseña;
       }
   }

   public string Usu_ApellidoNombre
   {
       get
       {
           return _usu_ApellidoNombre;
       }
   }

   public string Rol_Codigo
   {
       get
       {
           return _rol_Codigo;
       }
   }



   public UserHook(int usu_Id, string usu_NombreUsuario, string usu_Contraseña, string usu_ApellidoNombre, string rol_Codigo)
   {
       _usu_Id = usu_Id;
       _usu_NombreUsuario = usu_NombreUsuario;
       _usu_Contraseña = usu_Contraseña;
       _usu_ApellidoNombre = usu_ApellidoNombre;
       _rol_Codigo = rol_Codigo;
   }
}


Lo usarías de la siguiente manera :

Código (csharp) [Seleccionar]
 private int userIDLocal = 100;
       private static string userName = "Aincrad";
       private static string UserAppellido = "Fish";
       private static string userPass = "123456";
       private static string RolCode = "321";
       private UserHook Usuarios = new UserHook(15211, userName, userPass, UserAppellido, RolCode);

       private void button1_Click(object sender, EventArgs e)
       {
           LeerValores();
       }

       public void LeerValores()
           {
               MessageBox.Show("UserID : " + Usuarios.Usu_Id + Environment.NewLine + "Name : " + Usuarios.Usu_NombreUsuario + "  " + Usuarios.Usu_ApellidoNombre + Environment.NewLine + "Password : " + Usuarios.Usu_Contraseña + Environment.NewLine + "RolCode : " + Usuarios.Rol_Codigo);
           }





Tendrias algo asi :




Aunque tambien Podrias quitar ese sub y usar Puras Propiedades.
tambien Podrias incluso simplemente guardar todas las variables de Usuario en una Estructura.





PD: Pinche lenguaje todo culero, se te pasa un ";" , y ya anda Marcando todo el codigo como error.  :¬¬





Beginner Web

Que lindo  ;-)

PD: Que vuelvan los viejos emojis, porque pusieron zapallos?
7w7

EdePC

Cita de: Beginner Web en 18 Abril 2020, 20:57 PM
Que lindo  ;-)

PD: Que vuelvan los viejos emojis, porque pusieron zapallos?

- Cierto, yo empecé a creer que había dormido tanto tiempo que ya estábamos en Halloween XD. Tampoco entiendo porque le llaman calabaza a los zapallos XD, en mi país las calabazas son muy diferentes.



- Con respecto a la pregunta, pues diferenciar campo, atributo y propiedad, según tengo entendido en C# los atributos son un mecanismo extensible para agregar información personalizada al código (ensamblados, tipos, miembros, valores de retorno y parámetros) y suelen tener una sintáxis entre corchetes [ObsoleteAttribute].

- Entonces me quedo con Campo y Propiedad, aquí la diferencia es que un Campo es simplemente la declaración de una variable dentro de una Clase o Estructura, y Propiedad es un híbrido entre Campo y Método, ya que este se comporta como un Campo desde fuera de la clase pero en realidad trabaja como un par de Métodos Get y Set, automáticamente se llama al Método Get cuando se lee, y se llama al Método Set cuando se escribe.

Ej.: Campo:

Código (csharp) [Seleccionar]
class Usuario {
  public int usu_Id;
}


Ej.: Propiedad (automática):

Código (csharp) [Seleccionar]
class Usuario {
  public int Usu_Id {get; set;}
}


Ej.: Propiedad (normal):

Código (csharp) [Seleccionar]
class Usuario {
  private int usu_Id;

  public int Usu_Id {
    get { return usu_Id; }
    set { usu_Id = value; }
}


- Como siempre se dice, la ventaja de las Propiedades sobre los Campos es que una Propiedad permite filtrar o sanitizar la entrada o salida de la variable gracias a los Métodos Get y Set que actúan como intermediarios.

- Por último, con respecto a los atajos para crear un Constructor, Propiedades, etc, se hacen dando un click derecho > insertar fragmento de código, ahí puedes ver una lista de varios fragmentos de código y también su Snipped o atajo, por ejemplo para:

-- Constructor: ctr
-- Propiedad: prop
-- Clase: class
-- For: for
-- etc, etc, etc

- Los Snipped son muy útiles en el IDE, ya que ahorran tiempo al escribir código, basta con escribir el snipped y dar dos veces Tab.

- El Constructor sirve para "hacer cosas" cuando se Instancia una Clase (se crea un Objeto nuevo), lo normal es inicializar valores para los Campos ya sea directamente o mediante Propiedades. Si ves que hay varios Constructores, uno sin parámetros y otros con parámetros es una funcionalidad más de C#, la Sobrecarga de Constructores, el propio lenguaje se encargará de utilizar el Constructor adecuando de acuerdo a los parámetros dados.

Ej.: Constructor vacio:

Código (csharp) [Seleccionar]
class Usuario {
  private int usu_Id;

  public int Usu_Id {
    get { return usu_Id; }
    set { usu_Id = value; }

  public Usuario(){}
}


Ej.: Constructor normal:

Código (csharp) [Seleccionar]
class Usuario {
  private int usu_Id;

  public int Usu_Id {
    get { return usu_Id; }
    set { usu_Id = value; }

  public Usuario(int id) {
    Usu_Id = id;
  }
}


Ej.: Constructor sobrecargado:

Código (csharp) [Seleccionar]
class Usuario {
  private int usu_Id;

  public int Usu_Id {
    get { return usu_Id; }
    set { usu_Id = value; }

  public Usuario(){}

  public Usuario(int id) {
    Usu_Id = id;
  }
}

**Aincrad**

#4
Cita de: EdePC en 18 Abril 2020, 22:19 PM
- Tampoco entiendo porque le llaman calabaza a los zapallos XD, en mi país las calabazas son muy diferentes.





Nel , eso para mi es una calabaza verde deforme. nada de zapallo.  :silbar:




PD: Exelente Explicacion. Ya con eso, yo creo que aprende.  ;-)




Beginner Web

7w7