2011-07-21 17 views
19

Según MSDN:por qué un constructores estáticos no tienen ningún parámetro

Un constructor estático no toma modificadores de acceso o tienen parámetros.

Se llama automáticamente a un constructor estático para inicializar la clase antes de que se cree la primera instancia o se haga referencia a cualquier miembro estático.

No se puede llamar directamente a un constructor estático.

¿Puede alguien explicar por qué el constructor estático no puede tener parámetros?

+4

Como no puede llamarlo directamente (según MSDN) –

+2

@Hightechrider técnicamente tampoco puede * llamar * a un constructor normal. La expresión 'new Foo (x)' no es una llamada explícita al constructor, el constructor se invoca en la memoria devuelta desde 'new'. – Motti

+0

posible duplicado de [Pasar parámetros estáticos a una clase] (http://stackoverflow.com/questions/2767017/passing-static-parameters-to-a-class) – nawfal

Respuesta

24

Como dice MSDN, Un constructor estático es llamado automáticamente para inicializar la clase antes de que se crea la primera instancia. Por lo tanto, no puedes enviar ningún parámetro.

Si el CLR debe llamar a un constructor estático, ¿cómo sabrá qué parámetros pasarlo?

4

Porque no se puede llamar directamente (según MSDN):

Un constructor estático no puede ser llamado directamente.

8

Los constructores estáticos se llaman automáticamente como parte de la inicialización de tipo. No se llaman explícitamente ... por lo que no hay ningún lugar donde pueda proporcionar argumentos para corresponder con los parámetros del constructor. ¿Por qué querrías permitir los parámetros si nunca pudieras especificar ningún valor para los argumentos?

8

¿Cómo controlaría los argumentos que se pasaron a dicho constructor, dado que se invocó automáticamente por el tiempo de ejecución cuando se hace referencia a la clase por primera vez y no se puede invocar directamente?

En teoría, tal sintaxis podría haberse ideado e implementado, pero eso necesitaría su invocación directa, ya que ahora una referencia de clase simple no sabrá qué pasar como argumentos para ello. El objetivo del constructor estático es realizar una inicialización de tipo de nivel antes de usar el tipo. Hacerlo automáticamente asegura que este sea el caso, mientras que la invocación directa deja mucho margen para errores.

2

Un constructor estático no podría tener ningún parámetro. Bueno, supongo que podría teóricamente, pero no hay ninguna instancia de la clase, por lo que no tendría ningún sentido. ¿Qué harías con esos parámetros si los tuvieras? ¿Llamar a otros métodos estáticos?

+0

Establecer variables estáticas privadas, por supuesto. –

0
  • Constructor estático se llama automáticamente antes de la primera instancia de se crea la clase.
  • Declarado mediante el prefijo de una palabra clave estática para la definición del constructor.
  • No puede no tener modificadores de acceso o tener ningún parámetro.
0

Crea un constructor vacío para la clase estática y coloca el código parametrizado en una función normal. Si llama a esta función, se creará la clase estática.

la clase estática:

static class DataB 
{ 
    static DataB(){} 

    public static void funcWithParams(string st) 
    {...} 
} 

se puede crear de esta manera:

DataB.funcWithParams("some string"); 
-1

Aquí se muestra un ejemplo de un método para permitir que las clases anidadas para acceder a los controles de formulario sin pasar el formulario como una PARÁMETRO DEL CONSTRUCTOR NESTED CLASS:

public partial class Form1 : Form 
{ 
    public int nWow; 

    public Form1() 
    { 
     InitializeComponent(); 
     Inner.AssignMe(this); // This is where the real action is. 
    } 

    class Inner 
    { 
     static Form1 Me; 

     static Inner(){} // empty static constructor necessary 

      // Called AssignMe in the Form1 constructor in this code, 
      // but this can be generalized to any nested class. 
     public static void AssignMe(Form1 form) { Me = form; } 

     public Inner() { Me.nWow = 1; } // Now u can access public Form1 
    }      // members and methods even from the nested 
}       // class' constructor. 

Me di cuenta de esto basado en o n El mensaje anterior de user3567816, que aunque conciso y con 0 votos, nunca es, con mucho, la solución más elegante y única. Nadie más está dando este consejo a este tipo de pregunta. ¡NO MÁS PERFECTAMENTE LOS PARÁMETROS DE LA FORMA REDUNDANTE EN CONSTRUCTORES DE CLASES ANIDADAS! ¡Esto es absolutamente genial!

No pude evitar dar un giro de VB.Net con el uso del nombre de variable estática Me. Sonrisa afectada.

0

estático Constructor

Debido constructor estático invocar automáticamente (que no tiene ningún control sobre la llamada de constructor estático) es por eso que no podemos pasar parámetros de constructor estático.

Y si no podemos pasar el parámetro al constructor estático, entonces por qué crearemos el constructor estático como parámetro.

Por lo tanto, debemos tener el parámetro menos constructor estático.

Cuestiones relacionadas