Personalmente, no veo nada de malo en acceder al miembro privado dentro de la clase. De hecho, eso es lo que normalmente hago (a menos que exista una lógica dentro de la propiedad getter/setter que siempre quiero aprovechar).
Simplemente tiene sentido para mí: el código dentro de la clase constituye implementación de esa clase; ¿Por qué ocultar una implementación de sí mismo?
Aquí hay un ejemplo de lo que quiero decir. Supongamos que tengo algún miembro, m_denominator
, y quiero que nunca sea cero:
private int m_denominator = 1;
public int Denominator
{
get { return m_denominator; }
set
{
if (value == 0)
throw new ArgumentException("Denominator must not be zero.");
m_denominator = value;
}
}
podría decir a mí mismo: "OK, donde quiera que establece este valor dentro de esta clase, que debe utilizar Denominator
para asegurarse de que No lo estoy poniendo a cero ". Pero estoy completamente en control de lo que estoy configurando Denominator
- ¡Estoy dentro de la clase! En este escenario, el objetivo de la lógica en la propiedad Denominator
es proteger la clase de los valores no válidos establecidos por el código del cliente. No hay excusa para establecer su estado interno a algún valor no válido dentro de la implementación de una clase.
Por supuesto, esta no es una regla absoluta. Seguramente hay momentos en que usar la propiedad por su lógica dentro de una clase puede ser una elección sensata como medida de protección; Realmente, solo estoy argumentando que es no está mal para acceder a miembros privados dentro de una clase.
Una cosa a tener en cuenta: incluso si está apuntando a .NET 2.0, si está usando C# 3 para hacerlo, todavía puede usar propiedades automáticas. No requieren ningún soporte de marco. –
@Jon: probablemente sea información suficientemente importante para justificar una respuesta en lugar de un comentario. – tvanfosson
@tvanfosson - ¡Estoy de acuerdo, no tenía ni idea de eso! – adamwtiko