2011-01-16 10 views
6

C# nos permite definir más de una clase con el método. El método principal es el punto de entrada para la ejecución del programa. Entonces, ¿por qué queremos tener más de un lugar para la ejecución del programa? ¿Cuál es la ventaja de múltiples métodos principales sobre un solo método principal?¿Cuál es el uso de múltiples métodos principales?

Editar:

Example.cs

Class Example_1 
{ 
public static void Main() 
    { 
    System.Console.WriteLine("Example 1") 
    } 

public void test() 
    { 
    System.Console.WriteLine("Test method") 
    } 
} 

Class Example_2 
{ 
public static void Main() 
    { 
    System.Console.WriteLine("Example 2") 
    } 
} 

Si escribo "csc Example.cs", entonces ¿qué pasaría? Qué hacer si deseo heredar el método de prueba de Class Example_1 en Class Example_2. Funcionará este código.

Example_1 abc = new Example_1(); 
abc.test(); 

Respuesta

12

Puede usarlo para que diferentes configuraciones de compilación construyan el mismo ejecutable pero con diferentes puntos de entrada, por ejemplo, un punto de entrada de consola frente a un punto de entrada de WinForms.

Personalmente lo uso al dar charlas y en el código de muestra para C# en profundidad. Cada archivo es un ejemplo autónomo, pero es más simple tener solo un punto de entrada, de modo que el punto de entrada usa una clase de utilidad para solicitar al usuario el ejemplo que quiere ejecutar.

+0

¿Cómo decirle al compilador/linker ¿Cuál de los métodos 'Main' es el punto de entrada? A través de la configuración de "objeto de inicio" en una configuración de proyecto VS.NET? –

+1

¿Cómo se selecciona el método que se marcará realmente con el token '.entrypoint' en sus metadatos? Estaba buscando 'EntryPointAttribute' pero encontré referencias a F # solamente. Nunca intenté lograrlo en C# y pensé que se trataba solo de nombrar las convenciones, que de hecho no es la mejor manera. –

+1

@Uwe: @Ondrej: ya sea a través de las propiedades del proyecto o el/main: cambio de línea de comando. –

0

Puede tener varios métodos llamados Main() en diferentes clases. Pero solo uno de ellos se usa para iniciar el programa. Es solo un método normal, puedes usar los otros Main para lo que desees. (Pero no se recomienda).

5

Primero, si tiene varios métodos principales, puede especificar cuál usar como punto de entrada para la aplicación por su compilador.

Múltiples métodos principales pueden ser útiles para propósitos de prueba. Tal vez estés desarrollando una aplicación de Windows como un editor de texto. Si está trabajando en algo como el resaltado de sintaxis, por ejemplo, puede tener un método principal adicional que inicie la GUI, cargue un archivo de prueba y habilite el resaltado de sintaxis apropiado. Otro ejemplo puede ser una aplicación que se compilará solo para uso de consola o como una aplicación de Windows que involucra dos clases diferentes con métodos principales.

+0

¿No puede lograr lo mismo con los parámetros de método principal y/o los símbolos de compilación condicional? – tenor

+0

Siento que debería haber un "Segundo" ... –

+0

@tenor - seguro que sí, así es como lo hago (para fines de prueba uso las instrucciones del preprocesador y para el cambio de interfaz utilizo parámetros). @Cody Gray - No estoy seguro de lo que quieres decir ...? – Matten

0

Probablemente sea algo raro, pero me imagino que si tuvieras que vincular a un código externo que tiene un método Main(), entonces querrías decirle al compilador que use el tuyo.

+1

Si está * enlazando * con el ensamblaje que contiene un método principal, no necesita decirle nada al compilador ... el método principal de terceros no estaría en su ensamblado, por lo que no habría ambigüedad. –

+0

Me gustaría saber si puede tener esa ambigüedad si enlaza a un netmodule. – tenor

0

¿Por qué no debería poder crear múltiples clases con un método Principal? Después de todo, Main es solo el nombre del método. Si crea una clase, está perfectamente bien definir un método llamado Main.

0

Cuando se utiliza Visual Studio CMD Prompt

luego tratar de ejecutar como se indica a continuación:

csc filename.cs /main:classname 

donde fichero es el nombre del archivo donde se almacena el código y nombre de clase es el nombre de la clase que contiene Main que nos gustaría ser el punto de entrada.

Como en el programa dado, hay dos clases A y B en las que cada una contiene un método principal. Podemos escribir como

csc nombre de archivo.cs/principal: A [para la Clase A Ejecución Principal] o,

filename.cs CSC/principal: B [para la Clase B Ejecución Principal]

+0

La pregunta era por qué y cómo no hacerlo. –

1

sólo puede haber un punto de entrada en un programa de C#. Si tiene más de una clase que tiene un método principal, debe compilar su programa con la opción/compilador principal para especificar qué método principal usar como punto de entrada.

t2.cs compilar y t3.cs, especificando que el método principal se encuentra en Prueba2 como éste, t3.cs

csc/t2.cs principales: Prueba2

Cuestiones relacionadas