2011-02-05 63 views

Respuesta

5

No, no lo hay. No puede tener una clase privada a menos que esté anidada.

2

¿En qué otro escenario entonces para una clase innter te gustaría tener una clase 'privada'?

Puede usar el modificador internal para crear una clase que solo sea visible en el ensamblaje actual.

// the class below is only visible inside the assembly in where it was declared 
internal class MyClass 
{ 
} 
2

Nº ¿Cuál sería el alcance de una clase de este tipo?

+3

Supongo que OP tiene más experiencia en Java, lo que permitiría la visibilidad dentro del mismo archivo fuente. –

30

Simplemente NO. Nada menos que está en una clase anidada

  • clases y las estructuras que no están anidadas dentro de otras clases o estructuras pueden ser pública o interna. Un tipo declarado como público es accesible por cualquier otro tipo. Solo se puede acceder a un tipo declarado como interno por tipos dentro del mismo ensamblaje. Las clases y las estructuras se declaran como interna de manera predeterminada a menos que la palabra clave public se agregue a la definición de la clase.

  • Las definiciones de clase o estructura pueden agregar la palabra clave interna para hacer que su nivel de acceso sea explícito. Los modificadores de acceso no afectan a la clase o estructura en sí, siempre tiene acceso a sí mismo y a todos sus miembros.

  • Los miembros de la estructura, incluidas las clases y las estructuras anidadas, se pueden declarar como públicas, internas o privadas. Los miembros de la clase, incluidas las clases y estructuras anidadas, pueden ser públicos, protegidos internos, protegidos, internos o privados. El nivel de acceso para los miembros de la clase y los miembros de la estructura, incluidas las clases y estructuras anidadas, es privado por defecto. Los tipos anidados privados no son accesibles desde fuera del tipo contenedor.

  • Las clases derivadas no pueden tener mayor accesibilidad que sus tipos de base. En otras palabras, no puede tener una clase pública B que se deriva de una clase interna A. Si esto se permitiera, tendría el efecto de hacer A pública, porque todos los miembros protegidos o internos de A son accesibles desde la clase derivada.


    Puede habilitar otros ensamblajes específicos para acceder a sus tipos internos mediante el InternalsVisibleToAttribute.

0

he encontrado la información en C# Default access modifier of Main() method ser también útil en relación con esta cuestión de haber programado en otros idiomas. En el siguiente ejemplo, MyClass sería interno y static void main sería privado. Como Peter Talyor insinuó que otros idiomas difieren, entonces creo que vale la pena mostrarlo explícitamente. Visual Studio, según el proyecto, crea un archivo cs de programa inicial similar al siguiente; la vista de clase en la pestaña Vista en Visual Studio, como se menciona en el artículo de Flujo de pila vinculado, puede ser útil para verificar los modificadores de acceso.

namespace MyNamespace{ 
    class MyClass{ 
     static void Main(string[] args){ 
     } 
    } 
} 
1

Podemos declarar una clase como privada dentro de otra clase.amablemente encuentre el siguiente código sobre cómo lograr lo mismo:

public class Class1 
    { 
    temp _temp ; 
    public Class1() 
    { 
     _temp = new temp(); 
    }  

    public void SetTempClass(string p_str, int p_Int) 
    { 
     _temp.setVar(p_str, p_Int); 
    } 

    public string GetTempClassStr() 
    { 
     return _temp.GetStr(); 
    } 

    public int GetTempClassInt() 
    { 
     return _temp.GetInt(); 
    } 

    private class temp 
    { 
     string str; 
     int i; 

     public void setVar(string p_str, int p_int) 
     { 
     str = p_str; 
     i = p_int; 
     } 

     public string GetStr() 
     { 
     return str; 
     } 

     public int GetInt() 
     { 
     return i; 
     } 
    } 
    } 
Cuestiones relacionadas