2009-06-19 20 views

Respuesta

67

Sí, puede simplemente no los hacen clases de nivel superior, tienen que ser las clases internas

public class Outer 
{ 
    protected class Foo 
    { 
    } 
} 

Esto está bien, significa que las únicas clases les permite ver Foo son subclases de exterior

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 conjuntos. Específicamente visible solo en el ensamblaje (o para amigos a través de InternalsVisibleTo) o fuera del ensamblaje.

Por lo tanto, mientras que los identificadores públicos/internos se utilizan aquí para la consistencia realmente el estado en IL es simplemente 'Público' o 'no pública' (como la Reflection.Emit flags show)

+0

+1 claridad de ejemplo. –

11

protected visibilidad se utiliza para indicar 'visible para las clases derivadas '. Esto tiene sentido en las cosas dentro de una clase, pero normalmente no tiene ningún significado en el 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.

3

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

Cuestiones relacionadas