web-dev-qa-db-fra.com

Quelle est la différence entre un espace public vide principal () et un espace privé statique principal () dans une application console C #?

Quelle est la différence entre

public static void Main()

et

private static void Main()

dans une application console C #? Plus précisément en ce qui concerne la méthode Main() (je comprends les différences entre public et private).

47
jai

Pour agir comme point de départ dans votre application, la méthode Main ne doit pas nécessairement être public.

Si vous décidiez de le faire public, il serait possible qu'il soit appelé à partir d'autres classes ou assemblys. En règle générale, vous n'aurez pas besoin de le faire, vous pouvez donc le conserver private.

Un cas d'utilisation possible pour le rendre public serait d'autoriser les tests automatisés à l'invoquer.

62
Ergwun

La différence entre les deux est la seule différence entre les modificateurs d'accès public et private car les deux sont valides. Cela dépend totalement de l'utilisation de l'application à utiliser.

Si vous souhaitez lancer le point d'entrée par un programme externe (c'est-à-dire l'utiliser comme API à des fins de test), vous devrez peut-être le rendre public afin qu'il soit accessible.

public

Si vous savez qu'il n'y a pas d'utilisation externe pour l'application, il est préférable de la rendre privée afin qu'aucune application externe n'y ait accès.

private

22
Zaheer Ahmed

Dans la plupart des cas, cela ne fera aucune différence. Microsoft préconise de rendre Main privé.

La seule vraie valeur à faire cela (pour autant que je sache) est qu'elle empêchera la méthode Main d'être invoquée directement par la base de code d'une autre application.

Une bonne discussion à ce sujet est disponible ici

11
SeeMoreGain

Mis à part la fonctionnalité de modificateur d'accès public et privé normal, rien. Les deux sont des points d'entrée valides.

Voir: Pourquoi le point d'entrée est-il autorisé à être privé? et Pourquoi la méthode principale est-elle privée?

6
Mark Sturgill

Le principal est marqué comme le point d'entrée pour l'exécution dans l'exe lui-même quand il est privé, donc rien de l'extérieur ne peut y accéder

Le rendre public rendra la méthode accessible de l'extérieur

Lire pour plus de précisions http://social.msdn.Microsoft.com/Forums/vstudio/en-US/9184c55b-4629-4fbf-ad77-2e96eadc4d62/why-is-main-in-c-not- a-public-static-? forum = csharpgeneral

4
zain27

Il y a une différence, car le premier est public et le second est privé, donc lorsque vous essayez d'utiliser le premier en dehors de la classe, cela fonctionnera très bien, mais ne fonctionnera pas avec le second.

Cependant, il n'y a aucune différence si vous essayez d'en faire un point d'entrée dans votre application. La méthode du point d'entrée peut être publique ou privée, peu importe.

3
MarcinJuraszek

public et privé sont les spécificateurs d'accès.

nous utilisons,

 public static void Main()

car pour exécuter le programme, vous devez appeler votre classe dans laquelle cette méthode Main () est présente, pour cela vous avez besoin que votre méthode Main () soit publique sinon elle ne sera pas accessible en dehors de la classe.

Et la raison pour laquelle il est statique est, car, il doit être accessible sans créer aucun objet de cette classe .i.e. au niveau de la classe.

2
Harish Talanki

La déclaration privée ou publique est son modificateur d'accès, un modificateur d'accès privé le rend inaccessible aux objets externes où un modificateur d'accès public le rend accessible aux objets externes. exemple d'utilisation:

Disons que nous avons une classe:

class myClass{
    public void test(){
        //do something
    }
}

Nous créons une instance de cette classe:

myClass mClass=new myClass();

Pour accéder à sa fonction membre, vous devez aller:

mClass.test();

S'il avait un modificateur d'accès privé, vous obtiendriez une erreur de compilation disant qu'il est inaccessible.

Et juste pour la connaissance, pour accéder à un membre sans créer une instance d'une classe, vous devez également rendre ce membre statique, par exemple:

class myClass{
    public static void test(){
        //do something
    }
}

Donc, pour y accéder maintenant, il vous suffit de faire simplement:

myClass.test();

(Notez que tous les membres accédés dans un membre statique doivent également être statiques)

2
Anomaly

Par exemple, lorsque vous souhaitez ajouter un point d'entrée pouvant appeler de l'extérieur d'une classe ou d'un assembly, vous devez définir public mais si ce n'est pas important, utilisez private.

1
user1968030

Basé sur le niveau d'accès.

private--> access to own class
public --> open to alll
1
user3138337