Pregunta

¿Se puede proteger una clase en .NET?
¿Por qué es / no es esto posible?

¿Fue útil?

Solución

Sí, simplemente no puedes convertirlos en clases de nivel superior, deben ser clases internas

public class Outer
{
    protected class Foo
    {
    }
}

Esto está bien, significa que las únicas clases que pueden ver a Foo son subclases de Outer

class X 
{
    // 'Outer.Foo' is inaccessible due to its protection level
    private void Flibble(Outer.Foo foo)
    {
    }
}

class X : Outer
{
    // fine
    private void Flibble(Outer.Foo foo)
    {
    }
}

Tenga en cuenta que no puede declarar ninguna clase externa como privada, protegida (o protegida interna) en c # ya que el modificador de acceso para las clases de nivel externo define su visibilidad en relación con otros ensamblados. Específicamente visible dentro del ensamblaje solamente (o para amigos a través de InternalsVisibleTo) o fuera del ensamblaje.

Por lo tanto, si bien los identificadores públicos / internos se usan aquí por coherencia, el estado en IL es simplemente 'Público' o 'No público' (como Reflection.Emit flags show )

Otros consejos

La visibilidad

protegida se usa para indicar 'visible a clases derivadas'. Esto tiene sentido en las cosas dentro de una clase, pero normalmente no tiene sentido a nivel de clase.

La única excepción a esto es una clase interna, donde la visibilidad protegida significa que las clases derivadas tendrán acceso a la clase interna.

Sí, simplemente no podemos convertirlos en clases de nivel superior, deben ser clases internas

Una clase protegida no se puede definir dentro de un espacio de nombres, solo se puede declarar como una clase anidada. Podría ser instanciado dentro de otras clases anidadas y podría ser heredado por otras clases anidadas y puede heredarse de otras clases anidadas.

Las clases anidadas y las clases que heredan de la clase primaria (Clase derivada o Clase secundaria) pueden acceder a un miembro protegido de una clase principal.

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