В чем разница между public static void Main() и private static void Main() в консольном приложении C#?

в чем разница между

public static void Main()

и

private static void Main()

в C# консольное приложение? В частности, как это относится к Main() метод (я понимаю различия между public и private).

10 ответов


действовать в качестве начальной точки в приложении Main метод не обязательно должен быть public.

если вы решили сделать это public, можно было бы вызвать его из других классов или сборок. Как правило, вам не нужно будет это делать, поэтому вы можете сохранить его private.

один возможный вариант использования для его создания public было бы позволить автоматическим тестам вызывать его.


разница между ними только разница в public и private модификаторы доступа, потому что оба допустимы.Это полностью зависит от использования приложения, которое нужно использовать.

Если вы хотите инициировать точку входа любой внешней программой (т. е. использовать в качестве API для тестирования), вам может потребоваться сделать ее общедоступной, чтобы она была доступна.

public

Если вы знаете, что нет внешнего использования для приложения, то это лучше сделать его частным, чтобы никакое внешнее приложение не получало к нему доступа.

private


для большинства целей это не будет иметь никакого значения. Microsoft выступает за создание Main private.

единственное реальное значение в этом (насколько мне известно) заключается в том, что это предотвратит вызов основного метода непосредственно кодовой базой другого приложения.

хорошее обсуждение этого доступно здесь


кроме обычных функций модификатора публичного и частного доступа, ничего. Оба являются допустимыми точками входа.

посмотреть: почему точка входа может быть частной? и почему основной метод является частным?


основной помечен как точка входа для выполнения в самом exe, когда он является частным, поэтому ничего извне не может получить к нему доступ

сделать его общедоступным сделает метод доступным извне

Подробнее читайте 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


есть разница, потому что первый является публичным, а второй-частным, поэтому, когда вы попытаетесь использовать первый из вне класса, он будет работать нормально, но не будет работать со вторым.

однако нет никакой разницы, если вы пытаетесь сделать один из них точкой входа в вашем приложении. метод точки входа может быть либо публичным, либо частным, это не имеет значения.


public и private являются спецификаторами доступа.

мы используем,

 public static void Main()

потому что для выполнения программы вам нужно вызвать свой класс, в котором присутствует этот метод Main (), для этого вам нужно, чтобы ваш метод Main() был общедоступным, иначе он не будет доступен вне класса.

и причина, по которой он статичен, заключается в том, что он должен быть доступен без создания каких-либо объектов этого класса .то есть на уровне класса.


частный или публичный оператор-это модификатор доступа, модификатор частного доступа делает его недоступным для внешних объектов, где модификатор открытого доступа делает его доступным для внешних объектов. пример использования:

Допустим у нас есть класс:

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

мы создаем экземпляр этого класса:

myClass mClass=new myClass();

для доступа к его функции-члену вы бы пошли:

mClass.test();

если бы у него был модификатор частного доступа, вы бы получили ошибку компиляции, говоря, что это недоступный.

и просто ради знания, чтобы получить доступ к члену без создания экземпляра класса, вы также сделаете этот член статическим, например:

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

поэтому, чтобы получить доступ к нему сейчас, вы просто сделаете:

myClass.test();

(обратите внимание, что любые члены, доступные в статическом члене, также должны быть статическими)


на основе уровня доступа.

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

например, если вы хотите добавить точку входа, которая может вызывать извне класса или сборки, вы должны установить public но если это не importatnt использовать private.