web-dev-qa-db-fra.com

c #: application console - méthodes statiques

pourquoi en C #, application console, dans la classe "programme", qui est par défaut, toutes les méthodes doivent être statiques avec

static void Main(string[] args)
44

Les fonctions membres ne sont pas ont pour être statiques; mais s'ils sont pas statiques, cela vous oblige à instancier un objet Program afin d'appeler une méthode membre.

Avec des méthodes statiques:

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

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

Sans méthodes statiques (en d'autres termes, vous obligeant à instancier 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 doit être statique, sinon vous devrez indiquer au compilateur comment instancier la classe Program, qui peut ou non être une tâche triviale.

63
Mark Rushakoff

Vous pouvez également écrire des méthodes non statiques, vous devez simplement les utiliser comme ceci

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

La seule exigence pour l'application C # est que l'assembly exécutable doit avoir une méthode principale statique dans n'importe quelle classe de l'assembly!

23
Arsen Mkrtchyan

La méthode Main est statique car c'est le point d'entrée de code vers l'assembly. Il n'y a pas d'instance d'aucun objet au début, seulement le modèle de classe chargé en mémoire et ses membres statiques, y compris la méthode statique du point d'entrée principal. Main est prédéfini par le compilateur C # pour être le point d'entrée.

Une méthode statique peut uniquement appeler d'autres méthodes statiques (sauf s'il existe un descripteur d'instance de quelque chose de composite à utiliser). C'est pourquoi la méthode Main appelle d'autres méthodes statiques et pourquoi vous obtenez une erreur de compilation si vous essayez d'appeler une méthode (statique) non statique.

Cependant, si vous créez une instance d'une classe, même de la classe Program elle-même, vous commencez à créer des objets dans votre application sur la zone de mémoire de la mémoire. Vous pouvez ensuite commencer à appeler les membres de leur instance.

11
John K

Toutes les méthodes ne doivent pas être statiques, vous pouvez ajouter des méthodes d'instance et également créer une instance de votre classe Program.
Mais pour Main, cela doit être statique car c'est le point d'entrée de votre application et personne ne va créer une instance et l'appeler.

5
Carlos Muñoz

Donc, les réponses techniquement correctes sont au-dessus :)

Je dois souligner qu'en général, vous ne voulez pas aller dans le sens de toutes les méthodes statiques. Créez un objet, comme le formulaire Windows, un contrôleur pour celui-ci et passez plutôt au code orienté objet sur la procédure.

1
Vitaly Stakhov