publicas protegidas privadas privada modificador entre diferencia clases clase c#

protegidas - modificador internal c#



¿Conjunto privado o miembro privado? (7)

Me preguntaba ¿qué se considera la mejor práctica de C #, los miembros privados / protegidos con captadores públicos o los públicos con fijadores privados / protegidos?

public int PublicGetPrivateSetter { get; private set; }

private int _privateMember; public int PublicGetPrivateMember { get { return _privateMember; } }

Siento que usar un miembro privado es más explícito en su código que es un setter privado (usando convenciones de nombres). Por otro lado, el uso de configuradores privados le brinda la opción de usar virtual (protegido), escribir menos código, tiene menos espacio para cometer errores y puede brindarle la opción de agregar un efecto secundario más adelante si lo necesita.

No pude encontrar lo que se considera una mejor práctica, o incluso si uno se considera mejor que el otro. Por lo que he visto, generalmente el 80% del tiempo (del código que HE visto) las personas NO usan configuradores privados ... No estoy seguro de que esto se deba a que la gente no sepa acerca de ellos, o porque es Se considera mejor utilizar realmente los miembros privados.

EDITAR:

De hecho, otros beneficios que olvidé al usar miembros privados son los valores predeterminados y el uso de solo lectura.


Conceptualmente hablando, no cambia nada. Es sobre todo una cuestión de gusto.

Personalmente uso el setter privado porque soy perezoso y uso propg fragmento propg . (propg pestaña tab)

Además, la mayoría de las veces termino configurando indicadores sucios y vinculando eventos a esas propiedades, así que también podría hacer una parte del trabajo ahora mismo. Si alguna vez necesita agregar un setter más tarde, es mucho más fácil si el código se escribe sin usar el miembro que está detrás desde el principio, ya que será menos código para cambiar.


En mi opinión, no hay mejores prácticas y muy poca (si alguna) diferencia en el código compilado resultante, realmente depende de sus necesidades o gustos / disgustos propios. Si sigue los estándares de nomenclatura de su grupo y cumple con los requisitos (por ejemplo, no necesita propagar una notificación de cambio), entonces no debería importar.

Una ventaja de los campos privados es que puede definir un valor predeterminado en el mismo lugar que su declaración. En una propiedad implementada automáticamente, tendrá que definir el valor predeterminado en el constructor si no es nulo o el valor predeterminado del tipo.

Sin embargo, todavía me gustan los setters privados. Pero generalmente no usamos propiedades de implementación automática ya que nuestros configuradores suelen tener una funcionalidad más rica, por ejemplo, notificaciones de actualización de propiedades, registro, etc.


Es lo mismo. En el primer ejemplo, el compilador genera el almacén de respaldo. En el segundo, generaste la tienda de respaldo. Dado que la implementación es interna a la clase, refactorizar uno en el otro no es un gran problema. Herramientas como Resharper hacen eso trivial. La razón por la que probablemente no haya visto a los instaladores privados es que es una característica de C # 3.0.


No hay nada malo con los setters privados. En la mayoría de los casos, se usa con propiedades automáticas para hacer que la propiedad esté solo fuera del alcance del objeto.


No hay una buena respuesta a esta pregunta. la mejor práctica es seguir nuestra nomenclatura de empresa y, si está solo, de la forma que prefiera.


No hay una mejor práctica que yo sepa. Sé que las propiedades automáticas fueron principalmente para facilitar las cosas aún más fácilmente para la generación de código y cosas relacionadas con LINQ.

Para mí, comienzo con propiedades automáticas y refactorizo ​​más tarde si es necesario. Dependiendo de la necesidad, puedo cambiar algo a virtual o protegido como usted mencionó, o tal vez refactorizar el uso de una variable (cuando quiero refactorizar el conjunto de accesores para que tenga algo de lógica).


Prefiero usar las propiedades implementadas automáticamente a menos que la implementación predeterminada no haga lo que quiero. Entonces, en este caso, ya que la propiedad implementada automáticamente hace lo que necesita, solo use eso:

public int Foo { get; private set; }

Sin embargo, otra situación es si desea que el campo sea de readonly (lo que significa que el único lugar donde se puede establecer el campo es en el constructor). Luego, debe definir el campo de respaldo y marcarlo de manera simple, ya que esto no es compatible con las propiedades implementadas automáticamente:

private readonly int foo; public int Foo { get { return foo; } }