una tipos que programacion metodos metodo funciones estructura ejemplos clases clase c# class oop properties methods

c# - tipos - que es una clase en programacion



Método vs Propiedad en C#: ¿cuál es la diferencia? (9)

Ahora que lo pienso, las propiedades son más que solo azúcar sintáctico. Son la cara pública de sus datos de miembro a su código de miembro.

Por lo tanto, le da una capa limpia para la recuperación o entrada de un único aspecto de sus datos miembro de su código.

Un DTO, por ejemplo, no es más que un conjunto de propiedades bien escritas, que dividen los datos y el comportamiento de manera eficiente. Sin un DTO, ¿te imaginas unir estrechamente tu DataGrid o Dropdown al complejo método de lógica de negocios?

En pocas palabras, los métodos realmente están haciendo el trabajo ... Las propiedades incitan a la acción u obtienen el estado.

Sin embargo, puedes usar código de método dentro de tus propiedades ... no es para lo que están diseñadas. Incluso, si es necesario, es mejor que realice una llamada limpia a otro método dentro de la propiedad en lugar de escribir su código en él. HTH!

Posible duplicado:
Propiedades vs Métodos

En el método, también puede escribir código y propiedades. Por ejemplo, tengo un Nombre de propiedad. Cuando cambie el nombre de la clase, me gustaría obtener algunos datos de la base de datos y cambiar el estado de mi objeto. Puedo agregar este código para establecer parte de mi propiedad. Otra solución es cambiar la parte del conjunto a privado y agregar el método llamado SetName y en este método agregar mi código.

Entonces cuál es la diferencia? ¿Cuándo es el momento en que no es bueno poner algún código en getter / setter y cuándo crear un método propio que se use para cambiar mi propiedad y otras partes de mi clase?


Aquí hay un buen conjunto de pautas para cuando usar propiedades vs métodos de Bill Wagner (enlace fijo)

  • Utilice una propiedad cuando todo esto sea cierto: los captadores deberían ser simples y, por lo tanto, es poco probable que arrojen excepciones. Tenga en cuenta que esto no implica acceso a la red (o la base de datos). Cualquiera puede fallar y, por lo tanto, lanzar una excepción.
  • No deberían tener dependencias el uno del otro. Tenga en cuenta que esto incluiría establecer una propiedad y hacer que afecte a otra. (Por ejemplo, establecer la propiedad FirstName afectaría a una propiedad FullName de solo lectura que comprenda el primer nombre + las propiedades del apellido implican tal dependencia)
  • Deben ser configurables en cualquier orden
  • El captador no tiene un efecto secundario observable. Tenga en cuenta que esta pauta no excluye algunas formas de evaluación perezosa en una propiedad.
  • El método siempre debe regresar inmediatamente. (Tenga en cuenta que esto excluye una propiedad que realiza una llamada de acceso a la base de datos, una llamada al servicio web u otra operación similar).
  • Use un método si el miembro devuelve una matriz.
  • Las llamadas repetidas al captador (sin código intermedio) deberían devolver el mismo valor.
  • Las llamadas repetidas al colocador (con el mismo valor) no deberían producir ninguna diferencia con una sola llamada.

  • El get no debe devolver una referencia a las estructuras internas de datos (Ver ítem 23). Un método podría devolver una copia profunda y podría evitar este problema.


Básicamente no hay diferencia (excepto para el "valor" de identificador reservado en un setter).

Getters y setters se traducen internamente en métodos estándar, de modo que el tiempo de ejecución no tiene idea de si algún getter o setter está asociado con una propiedad determinada. El término azúcar sintáctico a menudo se usa para construcciones de conveniencia como estas.

Sin embargo, hay un importante beneficio de ingeniería de software: su código tiende a ser más fácil de entender si se limita a utilizar getters y setters con get y set semántica. Es decir, solo hago los pasos necesarios para proporcionar la propiedad respectiva.

Un caso de uso común para hacer un poco de trabajo extra es, por ejemplo, la configuración u obtención de una propiedad que no está respaldada directamente por un campo de miembro. Por ejemplo, tienes una clase que contiene, por ejemplo, un valor que representa una distancia. Su clase podría proporcionar dos Propiedades: Kilómetros y Millas con los respectivos setters y getters. Luego harías conversiones simples en un par y te ahorrarías para almacenar el valor dos veces.

Como regla general, no debe poner ningún código en un captador que tenga efectos secundarios. Además, el único efecto secundario que debe tener el código en un setter es el cambio de estado en el objeto al que se refiere el setter.


Cada vez que me encuentro con la necesidad de poner código en un getter / setter pongo el código en un método privado y llamo a ese método desde el getter / setter. De esta forma, el código está disponible en una llamada a método si lo necesito en otro lugar. No estoy seguro si esta es la respuesta que estabas buscando, pero es solo una metodología que uso.


Dada una propiedad como esta

private string _name; public string Name { get { return _name; } set { _name = value; } }

es posible escribir los siguientes dos métodos:

public string get_Name() { return _name; } public void set_Name(string value) { _name = value; }

que actúan de manera idéntica Y, de hecho, esto es exactamente lo que el compilador hace por usted cuando crea una propiedad.

En términos generales, me alejo de las propiedades cuando el código dentro de ellas comienza a sentirse "caro", si eso tiene sentido. Quiero que las propiedades se sientan como campos (con efectos secundarios controlados que suceden en momentos específicos), por lo que deberían ser livianas.


Esencialmente, una propiedad es un par de métodos: getProperty y setProperty. Es solo la convención / simplificación de la cosa.

Se supone que el captador de propiedades no tiene efectos secundarios (bueno, pueden tener cierto efecto secundario, como la carga diferida).


Los métodos hacen algo. Por eso, por lo general, tienen verbos en sus nombres.

Mientras que la propiedad devuelve datos.

La línea es simple, una propiedad debe convertirse en un método si se hace algo diferente a acceder a los almacenes de datos internos de la clase.

Por ejemplo, si usted es una Propiedad llamada NumberOfQuetions para un usuario. Si tiene que ir a la base de datos para obtener el número de preguntas que deberían ser un método. Si devuelve un almacén interno, incluso si se realiza alguna lógica en el almacén interno, puede mantenerlo en el estado get.


Probablemente esta no sea la diferencia más importante, pero una de las diferencias es que el depurador se puede configurar para pasar por encima de las propiedades (suponiendo que su código sea trivial).


Una propiedad no es más que un azúcar sintáctico. En algunos casos, es mejor definir una propiedad en lugar de un método porque es más clara / más legible.

Las directrices de diseño establecen que, cuando la funcionalidad que está implementando es costosa, se debe preferir un método a una propiedad.

de hecho, una propiedad se implementa como uno o dos métodos; dependiendo de si su propiedad tiene un colocador o no. La propiedad se traduce en un método get_xxx y un set_xxx.