Tengo un código de auto-instanciación que me gustaría aplicar a unas 15 propiedades en una clase bastante grande. El código es similar a la siguiente, pero el tipo es diferente para cada instancia:C# Equivalente para Macros en C++ y usando Auto <> Propiedades
protected ComplexType _propertyName;
public ComplexType PropertyName
{
get
{
if (_propertyName == null) {
_propertyName = new ComplexType();
}
return _propertyName;
}
}
Para repetir esto en C++ (ya que hay ~ 15 casos), habría utilizado un preprocesador macro pero note que C# no los admite.
Me pregunto si alguien tiene una recomendación sobre cómo hacer esto limpiamente en C#?
De acuerdo con mi experiencia en C++, generalmente he encontrado que configurar todo en 'protegido' por 'privado' es una mejor opción si quieres proteger tu aplicación en el futuro sin renunciar a la protección de miembros. Raramente uso privado. – Ryall
@Kelix: pero en realidad está renunciando a la protección de miembros al proteger los campos. Ahora cualquier clase derivada tiene acceso completo a tus campos.Esto es algo similar a tener campos públicos, excepto que solo las clases derivadas y no todas las clases pueden acceder a los campos. –
@Martin: Sí, este es el efecto deseado. A menos que explícitamente no quiera permitir el acceso en clases derivadas, lo marcaré como 'protegido'. En general, si va a hacer el esfuerzo de derivar una clase, de todos modos querrá agregar o alterar el comportamiento de alguna manera, ¿por qué no proporcionar acceso no restringido para hacerlo? Obviamente, si se tratara de una interfaz de acceso público (como una biblioteca de clases), entonces 'privado' sería mucho más adecuado. Simplemente no me gusta restringir el acceso donde no es necesario. – Ryall