Propiedades vs métodos
Pregunta rápida: ¿Cuándo decide utilizar propiedades (en C#) y cuándo decide utilizar métodos?
Estamos ocupados teniendo este debate y hemos encontrado algunas áreas donde es discutible si debemos usar una propiedad o un método. Un ejemplo es este:
public void SetLabel(string text)
{
Label.Text = text;
}
En el ejemplo, Label
se trata de un control en una página ASPX. ¿Existe algún principio que pueda regir la decisión (en este caso) de convertir esto en un método o una propiedad?
Aceptaré la respuesta que sea más general y completa, pero que también toque el ejemplo que he dado.
De la sección Elegir entre propiedades y métodos de Pautas de diseño para desarrollar bibliotecas de clases:
En general, los métodos representan acciones y las propiedades representan datos. Las propiedades están destinadas a usarse como campos, lo que significa que las propiedades no deben ser computacionalmente complejas ni producir efectos secundarios. Cuando no viole las siguientes pautas, considere usar una propiedad, en lugar de un método, porque los desarrolladores menos experimentados encuentran las propiedades más fáciles de usar.
Sí, si todo lo que hace es obtener y configurar, use una propiedad.
Si está haciendo algo complejo que puede afectar a varios miembros de datos, un método es más apropiado. O si su captador toma parámetros o su definidor toma más que un parámetro de valor.
En el medio hay un área gris donde la línea puede quedar un poco borrosa. No existe una regla estricta y, a veces, diferentes personas no estarán de acuerdo sobre si algo debe ser una propiedad o un método. Lo importante es ser (relativamente) coherente con cómo lo haces (o cómo lo hace tu equipo).
Son en gran medida intercambiables, pero una propiedad indica al usuario que la implementación es relativamente "simple". Ah, y la sintaxis es un poco más limpia.
En términos generales, mi filosofía es que si comienzas a escribir un nombre de método que comienza con get o set y toma cero o un parámetro (respectivamente), entonces es un candidato principal para una propiedad.
Al buscar en MSDN, encontré una referencia sobre Propiedades frente a métodos que proporciona algunas pautas excelentes para crear métodos:
- La operación es una conversión, como por ejemplo
Object.ToString
.- La operación es lo suficientemente costosa como para comunicar al usuario que debería considerar almacenar en caché el resultado.
- Obtener el valor de una propiedad utilizando el descriptor de acceso get tendría un efecto secundario observable.
- Llamar al miembro dos veces seguidas produce resultados diferentes.
- El orden de ejecución es importante. Tenga en cuenta que las propiedades de un tipo deberían poder establecerse y recuperarse en cualquier orden.
- El miembro es estático pero devuelve un valor que se puede cambiar.
- El miembro devuelve una matriz. Las propiedades que devuelven matrices pueden ser muy engañosas. Normalmente es necesario devolver una copia de la matriz interna para que el usuario no pueda cambiar el estado interno. Esto, junto con el hecho de que un usuario puede asumir fácilmente que es una propiedad indexada, genera un código ineficiente.