Como parte de la documentación de Roslyn en GitHub, hay una página llamada Estado de implementación de la función de idioma , con funciones de lenguaje planificadas para C # y VB.
Una característica que no podía entender era el private protectedmodificador de acceso:
private protected string GetId() { … }
También hay una página de Notas de diseño de lenguaje C # , que explica muchas características nuevas, pero no esta.
Eric Lippert dijo en un comentario :
Su error es pensar en los modificadores como restricciones crecientes. Los modificadores de hecho siempre disminuyen las restricciones. Recuerde, las cosas son "privadas" por defecto; solo agregando modificadores los hace menos restringidos.
¿Cuál es el significado de private protected? ¿Cuándo podría usarlo?
c#
access-modifiers
c#-6.0
c#-7.2
Kobi
fuente
fuente

protected & internal,assembly protectedoproternal(espero que algunos de estos sean chistes). También está el hilo de discusión con algunas buenas ideas.protected | internalyprotected & internalRespuestas:
De acuerdo con " Professional C # 2008 " de De Bill Evjen y Jay Glynn, página 1699:
C ++ / CLI tiene una característica similar: definir y consumir clases y estructuras (C ++ / CLI)> Visibilidad de miembros :
fuente
internaltipo sin requerir que el miembro esté expuesto a todo en la asamblea?internal.internalvisibilidad (relacionada con el lugar donde se define la clase) es realmente ortogonal apublic/protected/privatevisibilidad (relacionada con la herencia) y que, tal vez,internaldebería ser su propio modificador separado depublic/protected/private.packageen Java se parece más al espacio de nombres en C #.Aquí están todos los modificadores de acceso en los diagramas de Venn, desde más limitantes hasta más promiscuos:
private:private protected: - agregado en C # 7.2internal:protected:protected internal:public:fuente
Esto es solo para proporcionar un gráfico (hecho con http://ashitani.jp/gv/ ) de los diferentes niveles de accesibilidad (las imágenes no caben en los comentarios).
Cada flecha significa "es más restrictivo que".
Los nombres son CLR
Private,FamilyANDAssembly,Assembly,Family,FamilyORAssembly,Public.Edición mucho más tarde: resultó que este nuevo y agradable nivel de acceso (con un nombre realmente pobre) finalmente no se incluyó en C # 6.0. Solo es compatible con C # 7.2 (y veo que actualizó sus "etiquetas" de preguntas).
fuente
a → ben el diagrama significa "aes más restrictivo queb", por lo que puede "leer" la flecha como "es más restrictivo que" (eso fue lo que intenté explicar), por lo que la flecha apunta en el menos restrictivo " dirección". La convención opuesta para las flechas podría haber sido igual de buena, por cierto, pero tuve que elegir una convención.Es solo una suposición, pero por un nombre que posiblemente puedas adivinar es una versión más restringida de
protected(o una versión más relajadaprivatesi lo deseas). Y solo una variante razonable es restringir elprotectedcomportamiento al ensamblaje.Uso posible: entonces desea tener
protecteduna implementación interna, pero no para usos externos (y no desea sellar la clase).PD: siempre existió en CLR, pero no en C # . Es una combinación de
protectedyinternal, cita:fuente
"Puede ser" solo visible para las subclases que están en el mismo ensamblado. Esto lo hace un poco restringido que
protected.fuente
Consulte las especificaciones de la función "privada protegida":
fuente