¿Por qué el punto de entrada del método principal en la mayoría de los programas C# estático?¿Por qué el punto de entrada del método principal en la mayoría de los programas C# estático?
Respuesta
Para llamar a un método de instancia necesita una instancia de un objeto. Esto significa que para iniciar su programa, el CLR necesitaría crear una instancia de decir Program
para llamar al método Main
. Por lo tanto, el constructor de Program
se ejecutará antes de Main
, lo que frustra el objetivo de tener un main por completo.
+1 Bien explicado. –
¿Pero esto significa que todavía se llama al constructor estático? –
@Yuriy, sí lo hace. Se llama específicamente como tal en la sección 10.11 de la especificación del lenguaje C#. No sé exactamente por qué se tomó esta decisión (puede haber sido forzada desde el nivel CLR) – JaredPar
Porque de lo contrario tendría que crear un objeto, y ejecutar el constructor podría causar efectos secundarios negativos.
¿Cómo podría crear su instancia de clase antes de principal de lo contrario?
De la misma manera que llamas main. No, el tiempo de ejecución hace muchas cosas antes de main, carga clases y crea objetos. –
Conceptualmente solo tiene una instancia de una estática. Y un método estático se corresponde bien con el idioma de un único punto de partida para un programa. Los diseñadores de idiomas podrían haber creado una clase de programa especial para utilizar con un método principal, pero eligieron crear una única función estática como punto de entrada. En algunos niveles, es solo una elección de diseño.
Los métodos estáticos se pueden ejecutar sin crear una instancia. Por convención, tienen el método main
como el método predeterminado para llamar.
El .NET runtime
llama al método Main
. (Nota: Main también se puede llamar desde cualquier lugar, por ejemplo desde el código Main() en otro método de ExampleClass). La palabra clave static
hace que el método sea accesible sin un instance
de ExampleClass
. Entonces, el método principal es un punto de entrada y debe declararse estático.
De lo contrario, el programa requeriría una instancia, pero cualquier caso sería requerir un programa.
Para evitar que irresoluble circular dependency
principal se utiliza como punto de entrada
referencia: http://en.wikipedia.org/wiki/C_Sharp_(programming_language
Me vuelta a la pregunta. ¿Cuál es el beneficio convincente de implementar la característica que permite que Main sea un método de instancia? Las características son costosas; si no hay un beneficio convincente, no se implementan.
¿Tiene una muy buena razón por la cual se debe permitir que Main sea un método de instancia?
por cada objetos de una clase contiene método principal y otros métodos y variables, hay copias separadas de cada variable y métodos contenida por todos los objetos, sino una copia de la clase principal es único entre ellos y así hacer una copia entre el número de los objetos tenemos que hacer el método principal como estático.
- 1. El programa no contiene un método estático "Principal" adecuado para un punto de entrada
- 2. Evitar el principal (punto de entrada) en un programa C
- 3. Error CS5001: exe no contiene un método estático `Principal 'adecuado para un punto de entrada
- 4. Ayuda con el método estático de C++
- 5. ¿Cómo sabe el tiempo de ejecución qué clase contiene el método principal en la aplicación C#?
- 6. ¿Por qué los programas de estilo rápido son más cortos que los programas de estilo defensivo?
- 7. ¿Por qué la mayoría de los ejemplos que usan ArrayList
- 8. ¿Por qué se desaprobaron la mayoría de los métodos java.util.Date?
- 9. ¿Qué es un "método estático" en C#?
- 10. ¿Por qué el '{' arroja una NullReferenceException en un método estático?
- 11. Cómo actualizar los controles del método estático?
- 12. ¿Orígenes del nombre 'principal' para el punto de entrada del programa?
- 13. Uso apropiado del método estático
- 14. ¿Por qué mi método estático oculta mi método de instancia?
- 15. ¿Por qué no es bueno escribir en el campo estático del método de instancia en Java?
- 16. ¿Qué tipo de programas usa C/C++ por ahora?
- 17. Método estático del protocolo Objective-C?
- 18. ¿Por qué la mayoría del código del controlador de muestra MVC devuelve ActionResult?
- 19. por qué el método principal en C# siempre se coloca dentro de la clase pero no en C++
- 20. ¿Por qué el código en la mayoría de las implementaciones de STL es tan intrincado?
- 21. ¿Cuál es el punto de un método estático en una clase no estática?
- 22. ¿Por qué setFollowRedirects (boolean auto) un método estático de HttpURLConnection
- 23. ¿Por qué no puedo inicializar el campo estático en C++
- 24. ¿Qué sucede cuando llamas a un método estático en C#?
- 25. Conversión de C# a VB.NET: ¿por qué el método estático no es visible?
- 26. ¿Por qué Java es utilizado por la mayoría de los bancos?
- 27. C# Método estático vs instancia de objeto
- 28. ¿Por qué los programas no solo matan y reinician explorer.exe?
- 29. método estático no puede implementar el método de interfaz, ¿por qué?
- 30. ¿Qué es "String args []"? parámetro en el método principal Java
Esta es una gran pregunta, para la cual no puede haber una respuesta realmente satisfactoria. Se ejecutan muchas cosas antes de que se llame a Main, y estas pueden incluir tantos constructores de objetos como desee. Pero aún así, creo que si el constructor del objeto Program recibe una excepción de falta de memoria, ¡entonces su computadora está teniendo un * realmente * mal día! –
Porque no quiere asustar demasiado a los programadores de C++ y Java. – zaratustra