vacio propiedad predeterminado polimorfico metodo herencia constructores automatico c# .net oop static-methods

predeterminado - propiedad static c#



Por qué un constructor estático no tiene ningún parámetro (9)

Según MSDN:

Un constructor estático no toma modificadores de acceso o tiene 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.

Un constructor estático no puede ser llamado directamente.

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


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

En teoría, tal sintaxis podría haber sido diseñada e implementada, pero eso requeriría su invocación directa, ya que ahora una simple referencia de clase no sabrá qué transmitirle como argumentos. El objetivo principal del constructor estático es realizar la inicialización a nivel de tipo antes de usar el tipo. Hacerlo automáticamente garantiza que este sea el caso, mientras que la invocación directa deja mucho espacio para errores.


Como dice MSDN, se llama automáticamente a un constructor estático para inicializar la clase antes de que se cree 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?


Cree un constructor vacío para la clase estática y ponga el código parametrizado en una función normal. Si llamas 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) {...} }

Puedes crearlo así:

DataB.funcWithParams("some string");


Este es un ejemplo de un método para permitir que las clases anidadas accedan a los controles de Formulario SIN PASAR EL FORMULARIO COMO PARÁMETRO AL CONSTRUCTOR DE LA CLASE ANESTADA

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.

Descubrí esto basándose en el mensaje anterior del usuario 3567816, que, aunque conciso y con 0 votos, nunca es la solución más elegante y única. Nadie más está dando este consejo a este tipo de pregunta. ¡NO HAY MÁS PARÁMETROS DE FORMULACIÓN REDUNDANTE ALEGRE EN CONSTRUCTORES DE CLASES DE NESTED! ¡Esto es absolutamente brillante!

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


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


Porque no puedes llamarlo directamente (según MSDN):

Un constructor estático no puede ser llamado directamente.


Un constructor estático no podría tener ningún parámetro. Bueno, supongo que podría en teoría, pero no hay un ejemplo 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?


Constructor estático

Debido a que el constructor estático invoca automáticamente (no tenemos ningún control sobre la llamada del constructor estático), es por eso que no podemos pasar el parámetro al constructor estático.

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

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


  • Se llama automáticamente al Static Constructor antes de que se cree la primera instancia de la clase.
  • Se declara prefijando una palabra clave estática a la definición del constructor.
  • No puede tomar modificadores de acceso ni tener ningún parámetro.