44 votes

c# : application console - méthodes statiques

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

static void Main(string[] args)

0 votes

Wow... tant de bonnes réponses en si peu de temps... Donc ... vous êtes géniaux ! !! tous ceux qui ont répondu ... merci ! !!

64voto

Mark Rushakoff Points 97350

Les fonctions membres ne avoir pour être statiques ; mais s'ils le sont no statique, qui nécessite l'instanciation d'un fichier Program afin d'appeler une méthode membre.

Avec les 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, nécessitant l'instanciation de l 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, car sinon il faudrait dire au compilateur comment instancier la fonction Program ce qui n'est pas forcément une tâche triviale.

1 votes

L'instanciation du Program Si c'est un gros programme, cela semble être une mauvaise chose à faire.

24voto

ArsenMkrt Points 24447

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

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

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

11voto

John K Points 13695

La méthode Main est statique car c'est le point d'entrée du code dans l'assemblage. Il n'y a pas d'instance d'objet au départ, 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 Main. La méthode Main est prédéfinie par le compilateur C# pour être le point d'entrée.

Une méthode statique ne peut appeler que d'autres méthodes statiques (à moins qu'il n'y ait un gestionnaire d'instance de quelque chose de composé pour l'utilisation). C'est pourquoi la méthode Main appelle d'autres méthodes statiques et que vous obtenez une erreur de compilation si vous essayez d'appeler une méthode non statique (d'instance).

Cependant, si vous créez une instance de n'importe quelle classe, même de la classe Programme elle-même, vous commencez à créer des objets dans votre application sur le tas de la mémoire. Vous pouvez alors commencer à appeler leurs membres d'instance.

5voto

Carlos Muñoz Points 6208

Toutes les méthodes ne doivent pas nécessairement être statiques. Vous pouvez ajouter des méthodes d'instance et créer une instance de votre classe de programme.
Mais pour Main, il 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.

1voto

Vitaly Stakhov Points 105

Les réponses techniquement correctes sont donc ci-dessus :)

Il convient de souligner qu'en règle générale, il n'est pas souhaitable d'utiliser toutes les méthodes statiques. Créez un objet, comme un formulaire Windows, un contrôleur pour cet objet et orientez votre code vers l'objet plutôt que vers la procédure.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X