Pregunta

Me gustaría crear un auto-propiedad interna:

internal bool IP { get; protected internal set; }

pensé que sería posible hacer que el colocador protected o protected internal - pero siempre me sale el error modificador de la accesibilidad debe ser más restrictiva que la propiedad . ¿No es ese el caso? Private no me ayuda, aquí.

EDIT:
La pregunta es:? ¿Cómo se implementa un auto-propiedad con un captador interno y un regulador protegido

¿Fue útil?

Solución

es efectivamente protected o internal, no y . Es accesible ambos por clases y tipos derivados en el mismo conjunto. Es un error común pensar protected internal significa accesible sólo para las clases derivadas en el mismo conjunto.

Otros consejos

A nivel NET, hay dos niveles de acceso similares pero distintas:

  • FamilyAndAssembly: más restrictiva que sea protegido o interna
  • FamilyOrAssembly: menos restrictivo que sea protegido o interna

"protegido interno" en C # significa FamilyOrAssembly; no hay modificador para FamilyAndAssembly.

Por lo tanto, su protected internal colocador es menos restrictivo que el internal propiedad en general. Lo que podría hacer es:

protected internal bool IP { internal get; set; }

Pero entonces su colocador es menos restrictivo que el comprador, lo cual es extraño ...

Otra alternativa (algo equivalente) es:

internal bool IP { get; set; }

protected void SetIP(bool ip)
{
    this.IP = ip;
}

Me parece que es hacer trampa, ya que Eric Lippert está en él mismo, pero escribió una excelente entrada en el blog que tiene en cuenta este problema.

Por qué no puedo acceder a un miembro protegido de una clase derivada, Tercera parte

En última instancia, su respuesta es en gran parte los mismos que los dados por los carteles aquí, sino que los anuncios un razonamiento interesante detrás del desgin de la lengua y la aplicación de estas características.

Teniendo en cuenta lo mencionado Jon Skeet (y el comentario de user59808), ¿no sería esto lograr el resultado deseado?

protected internal bool IP { get; protected set; }

protected internal es menos restrictivo que sea protected o internal porque permite tanto sus subclases (<=>) y nada en el mismo conjunto (<=>) para acceder a algo.

medios internos protegidas visibles a las clases en el mismo conjunto, o a las clases derivadas de la clase que contiene - en otras palabras, es visible a los que cumplen los requisitos internos o los requisitos protegidas, no Y. No hay ningún modificador de acceso protegido y significado interno de esta manera.

medios interna protegida protegido o interna, no protegido e interna. Así alcance está limitado a la misma montaje o derivados clases, no necesariamente ambos.

  

modificador de accesibilidad debe ser más restrictiva que la propiedad

Interno es más restrictiva que protegía:. Porque las cosas protegidas se pueden ver (por subclases) el exterior del conjunto

El compilador está diciendo que no tiene sentido en decir que set está protegida (es decir, visible a las subclases el exterior del conjunto), cuando todo el IP propiedad es interna (es decir, invisible el exterior del conjunto).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top