La idea básica es que un "campo" (variable de nivel de instancia) que se declara como protegido es probablemente más visible de lo que debe ser, y menos "protegido" de lo que quisiera. No hay un modificador de acceso en C / C ++ / Java / C # que sea equivalente a "accesible solo para las clases secundarias dentro del mismo ensamblado", lo que le permite definir sus propios hijos que pueden acceder al campo en su ensamblaje, pero no permitir que los niños creados en otros ensamblados tengan el mismo acceso; C # tiene modificadores internos y protegidos, pero combinarlos hace que el acceso sea "interno o protegido", no "interno y protegido". Por lo tanto, cualquier niño puede acceder a un campo protegido, ya sea que usted haya escrito ese niño o alguien más. Protegido es, por lo tanto, una puerta abierta a un hacker.
Además, los campos, por su definición, prácticamente no tienen validación inherente a su cambio. en C #, puede hacer uno de solo lectura, lo que hace que los tipos de valor sean efectivamente constantes y los tipos de referencia no puedan reinicializarse (pero aún son muy mutables), pero eso es todo. Como tal, incluso protegido, sus hijos (en los que no puede confiar) tienen acceso a este campo y pueden configurarlo como algo no válido, haciendo que el estado del objeto sea inconsistente (algo que debe evitarse).
La forma aceptada de trabajar con campos es hacerlos privados y acceder a ellos con una propiedad y / o un método getter y setter. Si todos los consumidores de la clase necesitan el valor, haga público el captador (al menos). Si solo los niños lo necesitan, proteja al captador.
Otro enfoque que responde a la pregunta es preguntarse a sí mismo; ¿Por qué el código en un método secundario necesita la capacidad de modificar mis datos de estado directamente? ¿Qué dice eso sobre ese código? Ese es el argumento de la "distancia vertical" en su cara. Si hay un código en un elemento secundario que debe alterar directamente el estado primario, ¿tal vez ese código debería pertenecer al elemento primario en primer lugar?