studio - Exponer objetos miembros como propiedades o métodos en.NET
property c# get set (7)
En .NET, si una clase contiene un miembro que es un objeto de clase, ¿debería exponerse ese miembro como una propiedad o un método?
Eso es irrelevante para el asunto.
Debe ser una propiedad si el valor es algún detalle sobre el estado del objeto.
Debería ser Método si realiza alguna acción en el objeto.
Las propiedades leen y asignan valores a instancias dentro de una clase.
Los métodos hacen algo con los datos asignados a la clase.
Propiedad. Una propiedad es básicamente solo un método "barato". Obtener o establecer una referencia a un objeto es bastante barato.
Solo para aclarar, se supone que las propiedades representan el estado interno de un objeto. Sin embargo, la implementación de un miembro como propiedad o método le dice al usuario qué tan costosa es la llamada.
Si todo lo que hace es exponer una instancia de objeto que sea relevante para el estado del objeto actual, debe usar una propiedad.
Se debe usar un método cuando tiene alguna lógica que está haciendo algo más que acceder a un objeto en memoria y devolver ese valor o cuando está realizando una acción que tiene un efecto amplio en el estado del objeto actual.
Visión de conjunto
En general, las propiedades almacenan datos para un objeto, como Nombre , y los métodos son acciones que un objeto puede tener que realizar, como Mover o Mostrar . A veces no es obvio qué miembros de la clase deberían ser propiedades y cuáles deberían ser los métodos: el método Item de una clase de colección (VB) almacena y recupera datos y puede implementarse como una propiedad indexada. Por otro lado, también sería razonable implementar Item como método.
Sintaxis
Cómo se va a utilizar un miembro de la clase también podría ser un factor determinante en si debe representarse como una propiedad o un método. La sintaxis para recuperar información de una propiedad parametrizada es casi idéntica a la sintaxis utilizada para un método implementado como una función. Sin embargo, la sintaxis para modificar dicho valor es ligeramente diferente.
Si implementa el miembro de una clase como una propiedad, debe modificar su valor de esta manera:
ThisObject.ThisProperty (Index) = NewValue
si el miembro de la clase se implementa como un método, el valor que se modifica debe modificarse utilizando un argumento:
ThisObject.ThisProperty (Index, NewValue)
Errores
Un intento de asignar un valor a una propiedad de solo lectura devolverá un mensaje de error diferente que una llamada similar a un método. Los miembros de la clase implementados correctamente devuelven mensajes de error que son más fáciles de interpretar.
Debe usar propiedades para todo lo que represente conceptualmente el estado del objeto, siempre que su recuperación no sea una operación lo suficientemente cara como para evitar el uso repetido.
Desde MSDN :
Los diseñadores de la biblioteca de clase a menudo deben decidir entre implementar un miembro de la clase como una propiedad o un método. En general, los métodos representan acciones y las propiedades representan datos. Use las siguientes pautas para ayudarlo a elegir entre estas opciones.
Use una propiedad cuando el miembro sea un miembro lógico de datos. En las siguientes declaraciones de miembros, Name es una propiedad porque es un miembro lógico de la clase.
public string Name get { return name; } set { name = value; }
Use un método cuando:
- La operación es una conversión, como Object.ToString.
- La operación es lo suficientemente costosa como para querer comunicarle al usuario que debería considerar almacenar el resultado en el caché.
- Obtener un valor de propiedad usando el acceso de 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 se deben poder establecer y recuperar 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. Por lo general, 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 se trata de una propiedad indexada, conduce a un código ineficiente. En el siguiente ejemplo de código, cada llamada a la propiedad Methods crea una copia de la matriz. Como resultado, 2n + 1 copias de la matriz se crearán en el siguiente ciclo.
Type type = // Get a type. for (int i = 0; i < type.Methods.Length; i++) { if (type.Methods[i].Name.Equals ("text")) { // Perform some operation. } }
El siguiente ejemplo ilustra el uso correcto de propiedades y métodos.
class Connection { // The following three members should be properties // because they can be set in any order. string DNSName {get{};set{};} string UserName {get{};set{};} string Password {get{};set{};} // The following member should be a method // because the order of execution is important. // This method cannot be executed until after the // properties have been set. bool Execute (); }
Confundí antes sobre el uso de la propiedad y el método. Pero ahora estoy usando esta regla de acuerdo con la Guía de MSDN :
los métodos representan acciones y las propiedades representan datos. Las propiedades están destinadas a ser usadas como campos, lo que significa que las propiedades no deben ser computacionalmente complejas o producir efectos secundarios. Cuando no infringe 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.