No busques más por todo internet porque has llegado al lugar adecuado, tenemos la solución que necesitas recibir sin complicaciones.
Solución:
No es posible en C#.
Solo en aras de la exhaustividad, esto es compatible con IL (modificador de acceso de familia y ensamblado).
¿Qué hay de malo en hacer público el getter? Si declara la propiedad como
public string[] Headers get; protected set;
cumple con todos los criterios que desea: todos los miembros del ensamblaje pueden obtener la propiedad y solo las clases derivadas pueden establecerla. Claro, las clases fuera del ensamblaje también pueden obtener la propiedad. ¿Asi que?
Si realmente necesita exponer la propiedad dentro de su ensamblaje pero no públicamente, otra forma de hacerlo es crear una propiedad diferente:
protected string[] Headers get; set;
internal string[] I_Headers get return Headers;
Claro, es feo decorar el nombre con eso. I_
prefix. Pero es una especie de diseño extraño. Hacer algún tipo de cambio de nombre en la propiedad interna es una forma de recordarse a sí mismo (oa otros desarrolladores) que la propiedad que están usando no es ortodoxa. Además, si luego decide que mezclar accesibilidad como esta no es realmente la solución adecuada para su problema, sabrá qué propiedades corregir.
Mantendría el modificador de acceso como protegido y tendría un método auxiliar interno.
protected override string[] Headers
get return headers; // Note that get is protected
set headers = value;
internal SetHeadersInternal(string[] newHeaders)
headers = newHeaders;
Pero de alguna manera, esto huele a que debería refactorizarse de alguna manera. Interno siempre es algo que usaría con moderación porque puede conducir a una arquitectura muy desordenada donde todo usa de alguna manera todo lo demás dentro del ensamblaje, pero por supuesto siempre hay excepciones.
Si te sientes estimulado, puedes dejar una noticia acerca de qué te ha parecido este tutorial.