2011-08-10 17 views
11

¿Cuál es la diferencia entre constructores estáticos, internos y públicos? ¿Por qué tenemos que crearlos todos juntos?¿Cuál es la diferencia entre constructores estáticos, internos y públicos?

static xyz() 
{ 
} 

public xyz() 
{ 
} 

internal xyz() 
{ 
} 
+1

No es necesario que las cree todas. – Otiel

+19

¿Por qué los votos hacia abajo? Entonces él no sabe algo, eneldo grande, no es como si hubiera hecho una pregunta estúpida. –

+0

@Gilad: una pregunta que un simple google proporcionará con una respuesta definitiva no es una buena pregunta. – Oded

Respuesta

8

El constructor estático se invocará la primera vez que se instancia un objeto del tipo o se llama a un método estático. Y sólo se ejecutará una vez

El constructor público es accesible a todos los otros tipos

El constructor interna sólo se puede acceder a los tipos en el mismo conjunto

Además de estos tres También ha protegido que sólo es accesible a tipos derivados de la tipo envolvente

y protegido interno que es sólo accesible para los tipos en el mismo conjunto o de los que deriva del tipo envolvente

una d privada que sólo es accesible desde el tipo y los de sus tipos anidados

+0

interno protegido que solo es accesible para tipos en el mismo conjunto O derivado del tipo envolvente (otro conjunto), no "que deriva ...". –

3
  • constructor estático corre únicos - antes del primer uso de la clase y se puede acceder sólo a los miembros estáticos de la clase
  • constructor público se ejecuta cada vez que se crea un objeto de la clase utilizando new
  • Interno es solo otro modificador de acceso para el constructor anterior. También puede ser privado también. Esto es exactamente lo mismo que los modificadores de acceso para otras funciones.

Su código en realidad no se compila, porque el interno y el público son el mismo constructor con diferentes modificadores, lo cual no se puede hacer. Debe elegir tanto interna como pública (o privada).

7

La diferencia entre public y internal es que el constructor internal sólo puede ser llamado desde dentro del mismo conjunto, mientras que el public uno puede llamar desde otros conjuntos como bien.

static es un constructor al que se llama solo la primera vez que se hace referencia a la clase. Los miembros estáticos no pertenecen a una instancia de la clase, sino a "la clase misma". Consulte http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx para obtener más información sobre static.

2

El constructor estático se llama la primera vez que se utiliza el tipo . Ya sea en un contexto estático o creando una instancia.

Todos los demás constructores se invocan cuando se crea una nueva instancia . El modificador simplemente determina qué código puede crear una instancia.

Si su constructor es privado, solo la clase en sí y los tipos anidados pueden crear una instancia (tal vez en un método de fábrica estático). Esto funciona como métodos públicos/privados/internos.

+1

partes privadas también están expuestas a tipos anidados –

+0

¿Hay alguna manera de forzar el "uso" de un tipo genérico T sin construir una instancia? – supercat

+1

No entiendo tu pregunta. Puede declarar un método estático con un parámetro genérico: 'static static T Get ()'. De esta forma, debe especificar el parámetro genérico al llamar al método. Si su clase tiene un Parámetro genérico, debe especificarlo en la clase. Me gusta 'SomeClass .Do()'. – Zebi

0

No es necesario crear todo tipo de constructores. Los modificadores de acceso cumplen la misma función que cualquier otro modificador de acceso: para determinar cómo se puede acceder a los constructores.

  • un constructor estático se llamará la primera vez que se accede de forma estática de la clase.
  • un constructor con internal modificador de acceso solo puede ser llamado por elementos que cumplan los criterios para internal, que es "accesible solo dentro de archivos en el mismo ensamblado".
  • un constructor con un public modificador de acceso se puede acceder por cualquier cosa
  • y así sucesivamente. Los constructores protected y private funcionan como espera: los constructores son accesibles para elementos que cumplen los criterios para el modificador de acceso.
Cuestiones relacionadas