Pregunta

Estoy utilizando una instancia de una clase privada como el objeto de estado suministrada a una operación stream.BeginRead. (La clase es privado para mi principal / clase de lectura y escritura corriente.)

public class MainClass
{
    // ...

    private class ResponseState
    {
        public IResponse response;
        public Stream stream;
        public byte[] buffer = new byte[1024];
    }
}

El acceso a la clase es a través de los campos directamente. Debe realmente facilitando el acceso a la clase a través de propiedades en este caso, a pesar de que es sólo para ser utilizado para la celebración de estado?

interesado en saber lo que otros hacen.

¿Fue útil?

Solución

Me - encapsulación es útil dentro de la clase, así como fuera de la clase. Canalizando todo el acceso a un miembro a través de una interfaz bien saber (es decir, la propiedad) que se está dando la flexibilidad para añadir lógica en torno a que el acceso posterior sin cambiar el código llamando.

Puede parecer una exageración pero, honestamente, teniendo en cuenta las propiedades implementadas de forma automática, es tan fácil de declarar una propiedad que puede así seguir adelante y utilizar uno para que tenga la máxima flexibilidad.

Otros consejos

No es requerida por el lenguaje C #, pero es una buena práctica nunca para exponer un campo directamente por razones de facilidad de mantenimiento -. Se sugiere utilizar una propiedad en lugar

StyleCop SA1401 :. FieldsMustBePrivate

TypeName - FieldsMustBePrivate
CheckID - SA1401
Categoría - Reglas de mantenibilidad

Causa

Un campo dentro de una clase C # tiene un acceso modificador que no sea privado.

Descripción de la regla

Una violación de esta regla se produce siempre que un campo de una clase se da acceso no privado. Por razones de mantenimiento, propiedades siempre debe ser utilizado como mecanismo para la exposición de campos fuera de una clase, y los campos siempre deben ser declaradas con acceso privado. Esto permite que la aplicación interna de la propiedad a cambio en el tiempo sin cambiar la interfaz de la clase.

Terrenos que se encuentran dentro de estructuras de C # se les permite tener cualquier nivel de acceso.

Cómo arreglar Violaciónes

Para fijar una violación de esta regla, hacer que el campo privado y añadir un alojamiento para exponer el exterior ámbito de la clase.

Si su clase es puramente estatal para la clase que contiene entonces usted podría considerar la colocación de los miembros directamente dentro de la clase que utiliza ellos. Si la clase es más que solo estado (y sospecho que lo es), entonces debe seguir las reglas capacidad de mantenimiento habitual.

En mi organización, cuando una clase era privado o interno, y es una clase de entidad, se utilizó campos públicos para acceder a él.

Sin embargo, desde C # 3.0 utilizamos propiedades automáticas , por lo que siempre utilizar las propiedades de acceso a campos privados.

De todos modos, el efecto es el mismo, en nuestro caso se trataba de hacer el código más legible.

La mejor práctica es usar las propiedades para cada miembro accesibles por otros tipos. propiedades automáticas en C # 3.0 hace que este muy fácil.

acabo de hacer un poco de lectura sobre esto una o dos semanas atrás. Hay los dos campos. Uno la mayoría dice que debe envolver en la propiedad porque mi maestra dijo así y todo el mundo lo hace. Dicen que es más fácil de agregar lógica adicional para una propiedad o más fácil de mantener y algunas otras razones débiles. El otro campo, se llaman "los verdaderos chicos OO" tienden a ser a lo largo de la línea de si utiliza propiedades en todo lo que están haciendo mal (con algunas excepciones, por supuesto). Su caso sería la excepción por lo que yo puedo decir. En realidad, pensando en ello, probablemente todavía decir que está haciendo mal :) simplemente no puede ganar. De todos modos, también dicen que si vas a usarlos no se moleste envoltura a menos que necesite la lógica extra en sus incubadoras y captadores. ¿Por qué frenar su programa hacia abajo para nada. (Parece que pueden medir la lenta también).

Me tienden a utilizar las propiedades sobre los campos como lo hago un montón de MVVM y necesidad de implementar INotifyPropertyChanged que les obliga. En su caso, yo no me preocuparía por envolviéndolos en propiedades sólo lo hace para la grasa inútil. Pero si estaba en una clase que necesitaba una propiedad entonces yo envuelvo para mantener las cosas similares en esa clase.

Si después de todo lo que no envolverlos, y necesitaba más tarde, es un clic derecho refactor-> campo de encapsulado para envolver una propiedad si usted tiene ReSharper.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top