Pregunta rápida, ¿hay alguna manera de llamar a su método principal como lo desee? ¿O tiene que llamarse "Main()"?C# Forma de nombrar el método Main() por ti mismo?
Respuesta
Tenga en cuenta que esta es una convención de C#, no una convención de .NET Runtime. Usted puede nombrar a su método de lo que usted desea en 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
}
}
}
Gracias, gran respuesta. Muy interesante – Chilln
De nada, gracias por las felicitaciones. Como una idea de último momento, me pregunto si una herramienta como PostSharp podría inyectar la parte apropiada del IL (.entrypoint) en un método que fue decorado con un atributo particular y por lo tanto obviar la "limitación" C# del punto de entrada que necesita ser nombrado Principal(). –
No, tiene que llamarse Principal. See Main() and Command Line Arguments (C# Programming Guide).
@Kevin: es mejor proporcionar enlaces de MSDN sin el número de versión en ellos, a menos que la respuesta sea específica de la versión. –
@John Gracias, siempre cometeré ese error al copiar un enlace. – kemiller2002
Tiene que llamarse Principal().
Necesita ser llamado Main()
ya que es el punto de entrada para la aplicación.
El nombre y las restricciones están definidos por el Framework. Esta es la página de MSDN para referencia:
Aparentemente, esta es una convención de C#, no una convención de .NET Framework. –
@Justin: ¿Sabía que suministró un enlace .NET 1.1? Lo he arreglado para que no tenga el número de versión. –
Tiene que ser llamado Principal.
Si realmente lo deseaba, podría crear su propio método y simplemente llamarlo como la única línea de código en Main.
public static void Main(String[] args)
{
Mane(args);
}
¿Alguna razón para hacer público principal? MSDN dice que no debería ser público ... – IVlad
No ... Principal es estándar. Sin embargo, lo que puede hacer es cambiar la clase que aloja el método Principal desde la configuración de "Objeto de inicio" de la propiedad del proyecto
Pero, en realidad, ¿por qué desea hacerlo? todo el mundo sabe que es principal ... así que estaría confundiendo a otros desarrolladores que pueden parecer a su código
De "Main() and Other Methods (C# vs Java)":
aplicación # Cada C debe contener un único método principal que especifica que la ejecución del programa es comenzar
@brydgesk: intente proporcionar enlaces de MSDN sin el número de versión en ellos. Ellos siempre estarán al día. –
Puede llamar a su método principal de otra manera, pero no se llamará como el primer método en su aplicación a menos que se llame Main
. Hay algunos otros requisitos y cosas para tener en cuenta también. De MSDN:
- El método Principal es el punto de entrada de su programa, donde el control del programa comienza y termina.
- Se declara dentro de una clase o estructura. Debe ser estático y no debe ser público.
- Puede tener un tipo void o int return.
- El método Principal se puede declarar con o sin parámetros.
- Los parámetros se pueden leer como argumentos de línea de comandos de índice cero.
- A diferencia de C y C++, el nombre del programa no se trata como el primer argumento de línea de comando.
@Mark: es mejor proporcionar enlaces de MSDN sin el número de versión, ya que siempre se referirán a la versión actual. –
No creo que hay una manera de hacerlo en el lado C# de cosas, pero si usted está dispuesto a modificar su IL es fácil suficiente para entrar y agregar .entrypoint a la función en IL. Consulte la entrada CLI en wikipedia.
- 1. En C, ¿cómo se llama inicialmente el método main()?
- 2. ¿Cómo mantenerse seco? ¡No te repitas a ti mismo!
- 3. ¿Qué puede hacer Boo por ti?
- 4. ¿Llamar a main() en sí mismo en C++?
- 5. C# Modificador de acceso predeterminado del método Main()
- 6. Explicar el extraño ensamblaje de la función C `main` vacía por el compilador de Visual C++
- 7. C atributo # costumbre nombrar
- 8. ¿Por qué int main() {} compila?
- 9. La mejor manera de nombrar el método asincrónico
- 10. Obtener el nombre del archivo ejecutable desde el método main()
- 11. main() en C, C++, Java, C#
- 12. Definición de main() en C
- 13. ¿Por qué main() en java void?
- 14. java args array en el método main() confusión (verificación nula)
- 15. ¿Diferencia entre void main e int main?
- 16. Método de JavaScript Nombrar minúsculas frente a mayúsculas
- 17. ¿Por qué usar def main()?
- 18. C++ main() en un gran POO proyecto
- 19. Nombrar el controlador raíz
- 20. ¿Por qué tenemos que nombrar los parámetros del método de interfaz?
- 21. C++: heredar el método no virtual sobrecargado y el método virtual con el mismo nombre causa el problema
- 22. ¿Cuántos argumentos tiene main() en C/C++
- 23. C++ tipo de retorno nulo de main()
- 24. ¿el estándar C++ prohíbe el prototipo void main()?
- 25. clase parcial con el método mismo nombre
- 26. ¿Por qué un método no es idéntico a sí mismo?
- 27. ¿Por qué no se define main `main (std :: vector <std::string> args)`?
- 28. Límite en el número de argumentos a main en C
- 29. Nombrar correctamente los eventos y controladores de C#
- 30. SQL Server 2005: ¿Por qué nombrar transacciones?
Esto nunca ha surgido de mí, solo porque puede tener solo una línea dentro de Main() y desde allí llamar lo que quiera. Sin embargo, estoy interesado en la respuesta. –
¿Hay alguna otra razón que no sea la curiosidad? Alguien tiene una cita que dice así: "Si la depuración es dos veces más difícil que escribir un código nuevo, entonces, por definición, no es lo suficientemente inteligente para depurar el código 'más inteligente' que se le ocurra". Enredarse con las convenciones cae directamente en esa categoría. –