C # Способ назвать метод Main () самостоятельно? - PullRequest
12 голосов
/ 09 апреля 2010

Быстрый вопрос, есть ли способ вызвать ваш основной метод как угодно? Или он должен называться «Main ()»?

Ответы [ 9 ]

18 голосов
/ 09 апреля 2010

Обратите внимание, что это соглашение C #, а не соглашение .NET Runtime. Вы можете назвать свой метод как хотите в IL:

.module Mane.exe
.subsystem 3
.corflags 9

.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89)
  .ver 2:0:0:0
}

.assembly Mane
{
    .custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = ( 01 00 00 00 00 ) 
    .custom instance void [mscorlib]System.CLSCompliantAttribute::.ctor(bool) = ( 01 00 01 00 00 ) 
    .custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( 01 00 07 31 2E 30 2E 30 2E 30 00 00 )
    .custom instance void [mscorlib]System.Resources.NeutralResourcesLanguageAttribute::.ctor(string) = ( 01 00 05 65 6E 2D 55 53 00 00 )

    .permissionset reqmin
               = {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'Execution' = bool(true)}}
    .hash algorithm 0x00008004
    .ver 1:0:0:0
}

.namespace Mane
{
    .class private abstract auto ansi sealed beforefieldinit Program extends [mscorlib]System.Object
    {
        .method private hidebysig static void Mane() cil managed
        {
            .entrypoint
            .maxstack 1
            ldstr "Hello, World!"
            call void [mscorlib]System.Console::WriteLine(class System.String)
            ret
        }
    }
}
5 голосов
/ 09 апреля 2010

Вы можете вызывать ваш основной метод как-нибудь еще, но он не будет вызываться как первый метод в вашем приложении, если он не называется Main. Есть несколько других требований и вещей, на которые стоит обратить внимание. От MSDN :

  • Основной метод - это точка входа в вашу программу, где начинается и заканчивается управление программой.
  • Он объявлен внутри класса или структуры. Он должен быть статичным и не должен быть публичным.
  • Может иметь тип возврата void или int.
  • Метод Main может быть объявлен с параметрами или без параметров.
  • Параметры могут быть прочитаны как аргументы командной строки с нулевым индексом.
  • В отличие от C и C ++, имя программы не рассматривается как первый аргумент командной строки.
3 голосов
/ 09 апреля 2010

Я не верю, что есть способ сделать это на стороне C #, но если вы хотите отредактировать свой IL, достаточно просто войти и добавить .entrypoint к функции в IL. Проверьте запись CLI в Википедии.

1 голос
/ 09 апреля 2010

Из " Main () и других методов (C # против Java) ":

Каждое приложение C # должно содержать один метод Main, указывающий, с чего должно начинаться выполнение программы.

1 голос
/ 09 апреля 2010

Нету ... Главное стандартно. Однако вы можете изменить класс, в котором размещен метод Main, из параметра «Startup object» свойства проекта

Но на самом деле, почему вы хотите? все знают, что это главное ... так что вы бы запутали других разработчиков, которые могут посмотреть на ваш код

1 голос
/ 09 апреля 2010

Должен называться Main.

Если вы действительно хотите, вы можете создать свой собственный метод и просто вызвать его как единственную строку кода в Main.

public static void Main(String[] args)
{
    Mane(args);
}
1 голос
/ 09 апреля 2010

Его нужно назвать Main(), поскольку это точка входа для приложения.

Имя и ограничения определены Каркасом. Вот страница MSDN для справки:

Основной (C #)

1 голос
/ 09 апреля 2010

Должен называться Main ().

1 голос
/ 09 апреля 2010
...