31 votos

Propiedades vs Campos: Necesita ayuda para agarrar los usos de las Propiedades de más de Campos

En primer lugar, he leído a través de una lista de publicaciones sobre este tema y no creo que se me han quedado propiedades porque de lo que yo había llegado a comprender acerca de la encapsulación y modificadores de campo (privado, público..ect).

Uno de los aspectos principales de C# que me han venido a aprender es la importancia de la protección de datos dentro de su código por el uso de la encapsulación. I 'pensamiento' entendí que para ser debido a la capacidad del uso de los modificadores (privado, público interno, protegido). Sin embargo, después de aprender acerca de las propiedades yo tengo algo roto en la comprensión no sólo de las propiedades de los usos, pero la importancia global/capacidad de protección de datos (lo que se entiende como la encapsulación) en C#.

Para ser más específicos, todo lo que he leído cuando llegué a las propiedades en C# es que usted debe tratar de usar en lugar de los campos cuando usted puede, a causa de:

1) que te permiten cambiar el tipo de datos cuando no se puede si se accede directamente al campo directamente.

2) se añade un nivel de protección de los datos de acceso

Sin embargo, a partir de lo que yo pensé que me había llegado a saber sobre el uso de modificadores de campo que hizo #2, me pareció que las propiedades que acabamos de generar código adicional a menos que usted tenía alguna razón para cambiar el tipo de número (#1) - porque son (más o menos) la creación de métodos ocultos para acceder a los campos en lugar de directamente.

Luego está toda la modificadores de poder, para ser agregado a las Propiedades de lo que complica aún más mi entendimiento de la necesidad de propiedades para acceder a los datos.

He leído una serie de capítulos de diferentes autores en "propiedades" y ninguno realmente han explicado una buena comprensión de las propiedades vs campos vs encapsulación (y buenos métodos de programación).

Puede alguien explicar:

1) ¿por qué me gustaría usar las propiedades en lugar de campos (especialmente cuando parece que me estoy agregar código adicional

2) algunos consejos sobre la manera de reconocer el uso de las propiedades y no verlos como simplemente métodos (con la excepción de la get;set de ser aparente) cuando el trazado de otros pueblos código?

3) Cualquiera de las reglas generales de pulgar cuando se trata de una buena programación de los métodos en relación a cuándo usar qué?

Gracias y lo siento por el post largo, no quería hacer una pregunta que se le ha pedido 100x sin explicar por qué estoy pidiendo de nuevo.

20voto

Kevin Puntos 57797

1) ¿por qué me gustaría usar las propiedades en lugar de campos (especialmente cuando se aparece solo estoy agregando más código

Usted siempre debe usar las propiedades donde sea posible. Ellos abstracto acceso directo al campo (el cual es creado para usted, si usted no cree uno). Incluso si la propiedad no es otra cosa que el establecimiento de un valor, se puede proteger a usted más tarde. Cambiar un campo a una propiedad más tarde se convierte en un cambio, así que si usted tiene un campo público y desea cambiar a un público de la propiedad, usted tiene que volver a compilar todo el código que originalmente acceder a ese campo.

2) algunos consejos sobre la manera de reconocer el uso de propiedades y no verlos como simplemente métodos (con la excepción de el get;set de ser aparente) cuando seguimiento de otros pueblos código?

No estoy totalmente seguro de lo que usted está pidiendo, pero cuando el seguimiento sobre el código de otra persona, siempre se debe asumir que la propiedad es hacer algo más que simplemente obtener y establecer un valor. Aunque es una práctica aceptada para no poner grandes cantidades de código en los métodos getter y setter, usted no puede simplemente asumir que, dado que es una propiedad que se comportan de forma rápida.

3) las reglas generales de pulgar cuando se viene a buenos métodos de programación en respecto a cuándo usar qué?

Yo siempre uso las propiedades a los métodos get y set donde sea posible. De que manera puedo agregar más adelante en el código si necesito comprobar que el valor está dentro de ciertos límites, no null etc. Sin el uso de propiedades, tengo que ir de nuevo y poner los controles en cada lugar que acceder a ellos directamente desde el campo.

11voto

Daniel Dyson Puntos 9913

Una de las cosas buenas acerca de las Propiedades es que los getter y setter puede tener diferentes niveles de acceso. Considere esto:

public class MyClass {

  public string MyString { get; private set; }

  //...other code
}

Esta propiedad sólo se puede cambiar desde dentro, dicen en un constructor. Tienen una lectura en la Inyección de Dependencia. Inyección de Constructor y de Propiedad de la inyección de tanto lidiar con la configuración de las propiedades de algún tipo de configuración externa. Hay muchos marcos por ahí. Si te adentras en algunos de estos se va a conseguir una buena sensación de propiedades y su uso. La inyección de dependencia también le ayudará con su 3ª pregunta acerca de la buena práctica.

Cuando se busca en otras personas de código, se puede saber si algo es un método o una propiedad, ya que los iconos son diferentes. También, en Intellisence, la primera parte de una propiedad del resumen es la palabra Propiedad.

8voto

GvS Puntos 28137

Usted no debe preocuparse acerca de la cantidad de código necesario para acceder a los campos a través de propiedades, será "optimizado" por el compilador JIT (inline el código). Excepto cuando es demasiado grande para estar en línea, pero entonces usted necesita el código adicional de todos modos.

Y el código adicional para la definición de las propiedades simples es también mínima:

public int MyProp { get; set; } // use auto generated field.

Cuando usted necesita para personalizar , siempre puedes definir tu propio campo más adelante.

Así que se queda con la capa adicional de encapsulación / protección de datos, y que es una buena cosa.

Mi regla: exponer los campos siempre a través de propiedades

7voto

ChrisF Puntos 74295

1) Hay varias razones por las que podría querer usar las Propiedades sobre los Campos, aquí son sólo un par:

a) al tener la siguiente

public string MyProperty { get; private set; }

usted está haciendo la propiedad de "sólo lectura". Nadie usando el código puede modificar su valor. Hay casos donde esto no es estrictamente cierto (si su propiedad es una lista), pero estos son conocidos y tienen soluciones.

b) Si usted decide que usted necesita para aumentar la seguridad de su código de propiedades de uso:

public string MyProperty
{
    get { return _myField; }
    set
    {
        if (!string.IsNullOrEmpty(value))
        {
            _myField = value;
        }
    }
}

2) Se puede decir que son propiedades porque no tienen (). El compilador le dirá si intenta agregar entre paréntesis.

3) Se considera una buena práctica utilizar siempre las propiedades.

3voto

dbemerlin Puntos 6257

Hay muchas situaciones donde el uso de un campo simple de no causar daño, pero
una Propiedad se puede cambiar más fácilmente más tarde, es decir, si desea agregar un evento cuando el valor de los cambios o desea realizar algún valor/rango de comprobación.

También, Si usted tiene varios proyectos que dependen unos de otros, usted tiene que volver a compilar todos los que dependen el uno en un campo se cambió a una propiedad.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X