2009-11-06 11 views
43

dlaczego w C# aplikacji konsoli, w klasie „Program”, który jest domyślnym, wszystkie metody muszą być statyczne wraz zC# aplikacji konsoli - metody statyczne

static void Main(string[] args) 
+0

wow .. tak wiele wspaniałych odpowiedzi w tak krótkim czasie ... SO .. ty rock !!! Ci wszyscy, którzy odpowiedzieli ... dzięki! –

Odpowiedz

63

funkcji członkowskim nie mają być statycznym; ale jeśli są one statyczne, to wymaga to utworzenia obiektu Program w celu wywołania metody składowej.

metod statycznych:

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

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

Bez metod statycznych (innymi słowy, wymagając do wystąpienia 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 musi być statyczna, ponieważ w przeciwnym razie trzeba by powiedzieć kompilator, jak utworzyć instancję klasy Program, co może, ale nie musi być banalnym zadaniem.

+1

Czy tworzenie instancji klasy "Program" jest inteligentnym posunięciem pod względem pamięci? jeśli jest to duży program, brzmi to okropnie. – MasterMastic

23

Możesz napisać niż metody statyczne też, po prostu należy użyć jak ten

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

Jedynym wymogiem dla aplikacji C# jest to, że zespół wykonywalny powinien mieć jedną statyczną metodę główną w każdej klasie w zespole!

11

Metoda główna jest statyczna, ponieważ jest to punkt wejścia kodu do zespołu. Na początku nie ma żadnego obiektu, tylko szablon klasy załadowany do pamięci i jego statyczne elementy, w tym statyczna metoda Main point. Główna jest predefiniowana przez kompilator C# jako punkt wejścia.

Metoda statyczna może wywoływać tylko inne statyczne metody (chyba że istnieje uchwyt instancji czegoś złożonego do użycia). Z tego powodu metoda Main wywołuje inne statyczne metody i dlatego pojawia się błąd kompilacji, jeśli próbujesz wywołać metodę niestatyczną (instancja).

Jeśli jednak utworzysz instancję dowolnej klasy, nawet samej klasy Programu, zaczniesz tworzyć obiekty w aplikacji na obszarze sterty pamięci. Następnie możesz zacząć wywoływać członków instancji.

5

Nie wszystkie metody muszą być statyczne, można dodać metody instancji, a także utworzyć instancję klasy Program.
Ale dla Main musi być statyczny, ponieważ jest to punkt wejścia do twojej aplikacji i nikt nie stworzy instancji i nie zadzwoni.

1

Więc technicznie poprawne odpowiedzi są powyżej :)

powinienem zwrócić uwagę, że na ogół nie chcą iść w kierunku wszystkich metod statycznych. Utwórz obiekt, taki jak formularz okna, kontroler i przejdź do kodu obiektowego, a nie proceduralnego.