• Sábado 27 de Abril de 2024, 17:38

Autor Tema:  como se define una propiedad en C#  (Leído 2186 veces)

th3r0rn

  • Miembro activo
  • **
  • Mensajes: 49
  • Nacionalidad: mx
    • Ver Perfil
    • http://imgeek.net
como se define una propiedad en C#
« en: Miércoles 2 de Diciembre de 2009, 09:35 »
0
Hola, se que muchos me diran q busque en google, pero el problema es que yo tengo un libro de ASP.NET de antonio martin sierra donde obvio la mayoria de lo que habla es de C#
El problema es que dicho autor dice que una propiedad se define de la siguente manera:
DEFINICIOPN DEUNA PROPIEDAD
Dentro de una clase una propiedad se define de la siguiente manera:
Código: C#
  1. public tipo nombre_clase
  2. {
  3.     get{
  4.         //Instrucciones que se ejecutaran al recuperar el valor de la propiedad
  5.         }
  6.  
  7.     set{
  8.         //Instrucciones que se ejecutaran al asignar un valor a la propiedad
  9.        }
  10. }
  11.  
Mucha gente me dice que eso no es del todo sierto que el autor esta mal que esos son metodos y no se q mas.
Podrian aclararme ustedes la verdadera realidad?  :wacko:
Gracias

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: como se define una propiedad en C#
« Respuesta #1 en: Miércoles 2 de Diciembre de 2009, 19:09 »
0
Cita de: "th3r0rn"
Mucha gente me dice que eso no es del todo sierto que el autor esta mal que esos son metodos y no se q mas.

Pues esa "gente" que te  lo dijo esta equivocada, y el autor del libro esta en lo correcto.

Las propiedades en C# se definen con set (escritura) y get (lectura), es correcto.

Tambien se pueden definir como variables de tipo public dentro de la clase, aunque en el paradigma POO no lo recomienda, en este paradigma se recomienda que nunca se debe acceder directamente a las variables de una clase, estas deben ser siempre privadas (o sea, accesibles solo dentro de la misma clase) y si necesita acceder a ellas, se deben usar "metodos" (en C++) o como te mencionan en el libro por medio de set/get en C#.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

th3r0rn

  • Miembro activo
  • **
  • Mensajes: 49
  • Nacionalidad: mx
    • Ver Perfil
    • http://imgeek.net
Re: como se define una propiedad en C#
« Respuesta #2 en: Miércoles 2 de Diciembre de 2009, 20:50 »
0
Gracias ProfesorX, aprovechando que respondes entonces segun explico lo que entiendo del siguiente codigo para ver si lo q pienso del funcionamiento es corecto:
Código: C#
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace constructor
  6. {
  7.     class casa
  8.     {
  9.         private int n;
  10.         //constructor
  11.         public casa(int num)
  12.         {
  13.             n = num;
  14.         }
  15.         public int NumHabitaciones
  16.         {
  17.             get
  18.             {
  19.                 return n;
  20.             }
  21.             set
  22.             {
  23.                 if (value > 0)
  24.                     n = value;
  25.             }
  26.         }
  27.         public double Superficie(double media)
  28.         {
  29.             return n * media;
  30.         }
  31.         static void Main(string[] args)
  32.         {
  33.             casa cs = new casa(3);
  34.             Console.WriteLine(cs.NumHabitaciones); //imprime 3
  35.             Console.WriteLine(cs.Superficie(10)); //Imprime 30
  36.             Console.Read();
  37.         }
  38.     }
  39. }
  40.  
  41.  
tenemos una clase llamada casa que dentro de esa clase se declara una propiedad privadad
de tipo entero el cual almacenara el valor en "n"
Seguido de esto declaramos el constructor que lleva el mismo nombre de la clase.
lel cual recibira un argumento el cual es entero y almacena su variable en la variable
num, en el cuerpo del constructor se asigna el valor contenido en n a la variable num de dicho
constructor.
Despues se declara una "propiedad llamada NumHabitaciones, la cual indica al recupetat el vañpr
de dicha propiedad regresara en pantalla el valor de "n"
Segido de esto tenemos la sentensia SET la cual indica que al asignar el valor a la propiedad
comprobara si el valor es mayor que 0 y si esto es verdadero  asignara dicho valor a n
Despus tenemos un metodo de tipo double llamado Superficie que recibe un argumente y lo almacena
en la variable "media", en el cuerpo de dicho metodo indica que regresara el valor de n miltiplicado por media
 Mi duda es, lo que se encuentra antes de iniciar el constructor:  dentro de la clase casa tenemos     private int n; esto que es? es una propiedad?
Ahora bien tenemos  public int NumHabitaciones que se supone que es una propiedad, tenemos las instrucciones que get ejecutara al recuperar el valor de dicha propiedad, pero... si se supone que aqui estamos definiendo la propiedad  como se supone que get y set van actuar si en esta parte de codigo es cuando se define una propiedad, como get y set pueden actuar al recuperar el valor de dicha propiedad si no se lo estamos pasando, entonces en este caso la propiedad es la que mesione que se encuentra dentro de la clase casa justo antes del constructor la cual es private int n;
?
Saludos

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: como se define una propiedad en C#
« Respuesta #3 en: Miércoles 2 de Diciembre de 2009, 22:06 »
0
Cita de: "th3r0rn"
dentro de la clase casa tenemos     private int n; esto que es? es una propiedad?

Si, si es una propiedad, pero de tipo privado, o sea, que solo puedes acceder a ella cumpliendo el principio de encapsulamiento, segun el paradigma de la POO como te mencione antes, el cual dice (tomado de wikipedia).

Citar
- Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.
- Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.

El punto de porque se hace asi, te lo marque en negritas, resumiendo, es para evitar efectos inesperados, si accedieramos directamente a la variable miembro.


Cita de: "th3r0rn"
como se supone que get y set van actuar si en esta parte de codigo es cuando se define una propiedad, como get y set pueden actuar al recuperar el valor de dicha propiedad si no se lo estamos pasando, entonces en este caso la propiedad es la que mesione que se encuentra dentro de la clase casa justo antes del constructor la cual es private int n;
?
Saludos

A ver trato de explicartelo, tu tienes tu propiedad privada n, que representa el numero de habitaciones, si seguimos el principio de encapsulacion, n solo debe poder accederse dentro de la clase, para evitar modificaciones indeseadas a n. Pero en este caso necesitas saber el numero de habitaciones desde fuera de tu clase casa, por lo que creamos mediante get/set una manera de acceder a la variable n. la parte que dice return del get nos regresa el valor de n, y la parte que dice n = value del set, nos guarda el valor en la variable n, value es una variable que se crea atutomaticamente cuando lo usamos dentro de set, para facilitarnos las cosas.

ahora, tu podrias olvidarte de la encapsulacion y definir NumHabitaciones de tipo public, lo cual seria equivalente y valido:

Código: C#
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5.  
  6. namespace constructor
  7. {
  8.     class casa
  9.     {
  10.         //constructor
  11.         public int NumHabitaciones;
  12.         public casa(int num)
  13.         {
  14.             NumHabitaciones = num;
  15.         }
  16.         public double Superficie(double media)
  17.         {
  18.             return NumHabitaciones * media;
  19.         }
  20.         static void Main(string[] args)
  21.         {
  22.             casa cs = new casa(3);
  23.             Console.WriteLine(cs.NumHabitaciones); //imprime 3
  24.             Console.WriteLine(cs.Superficie(10)); //Imprime 30
  25.             Console.Read();
  26.         }
  27.     }
  28. }
  29.  
  30.  

Nota como elimine la variable interna n, y la reemplace por la variable NumHabitaciones. Pero entonces cualquiera pude acceder a tu variable interna, lo que puede generar cambios inesperados a tu variable, y deja de cumplir con el principio de encaspulacion como dije antes.

Espero que con la breve explicacion te quede un poco mas claro.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================