2010-03-02 7 views
37

¿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?

+0

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! –

+5

Porque no quiere asustar demasiado a los programadores de C++ y Java. – zaratustra

Respuesta

59

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.

+2

+1 Bien explicado. –

+9

¿Pero esto significa que todavía se llama al constructor estático? –

+3

@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

1

Porque de lo contrario tendría que crear un objeto, y ejecutar el constructor podría causar efectos secundarios negativos.

1

¿Cómo podría crear su instancia de clase antes de principal de lo contrario?

+3

De la misma manera que llamas main. No, el tiempo de ejecución hace muchas cosas antes de main, carga clases y crea objetos. –

4

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.

0

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.

0

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

16

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?

-3

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.

Cuestiones relacionadas