2009-11-06 20 views
43

por eso en C#, aplicación de consola, en la clase de "programa", que es por defecto, todos los métodos tienen que ser estático junto conC#: aplicación de consola - métodos estáticos

static void Main(string[] args) 
+0

wow ... tantas grandes respuestas en tan poco tiempo ... SO .. you rock !!! todos ustedes que respondieron ... ¡¡¡gracias !!! –

Respuesta

63

funciones miembros no tienen ser estático; pero si son no estáticos, eso requiere que cree una instancia de un objeto Program para llamar a un método miembro.

Con los métodos estáticos:

public class Program 
{ 
    public static void Main() 
    { 
     System.Console.WriteLine(Program.Foo()); 
    } 

    public static string Foo() 
    { 
     return "Foo"; 
    } 
} 

Sin métodos estáticos (en otras palabras, lo que requiere para crear una instancia Program):

public class Program 
{ 
    public static void Main() 
    { 
     System.Console.WriteLine(new Program().Foo()); 
    } 

    public string Foo() // notice this is NOT static anymore 
    { 
     return "Foo"; 
    } 
} 

Main debe ser estática, porque de lo contrario tendría que decir la compilador cómo crear una instancia de la clase Program, que puede o no ser una tarea trivial.

+1

¿Instalar la clase 'Program' es una jugada inteligente en términos de memoria? si es un programa grande, suena horrible. – MasterMastic

23

Puede escribir métodos no estáticos también, sólo se debe utilizar como esto

static void Main(string[] args) 
{ 
    Program p = new Program(); 
    p.NonStaticMethod(); 
} 

El único requisito para la aplicación de C# es que el ensamblado ejecutable debe tener un método estático principal en cualquier clase en la asamblea!

11

El método principal es estático porque es el punto de entrada del código al conjunto. No hay ninguna instancia de ningún objeto al principio, solo la plantilla de clase cargada en la memoria y sus miembros estáticos, incluido el método estático del punto de entrada principal. Main está predefinido por el compilador C# para ser el punto de entrada.

Un método estático solo puede llamar a otros métodos estáticos (a menos que exista un identificador de instancia de algo compuesto para su uso). Esta es la razón por la que el método Main llama a otros métodos estáticos y por qué se obtiene un error de compilación si intenta llamar a un método no estático (instancia).

Sin embargo, si crea una instancia de cualquier clase, incluso de la clase de programa en sí, comienza a crear objetos en la aplicación en el área de almacenamiento dinámico de la memoria. Luego puede comenzar a llamar a los miembros de su instancia.

5

No todos los métodos tienen que ser estáticos, puede agregar métodos de instancia y también crear una instancia de su clase de programa.
Pero para Main tiene que ser estático porque es el punto de entrada de su aplicación y nadie va a crear una instancia y llamarlo.

1

Por lo tanto, las respuestas técnicamente correctas están por encima :)

Debo señalar que por lo general no desea ir en la dirección de todos los métodos estáticos. Crea un objeto, como el formulario de Windows, un controlador para él y ve hacia el código orientado a objetos en lugar de hacia el procedimiento.