Main在类或结构中声明。 Main必须是静态的,不应该是公共的。
这意味着Main方法可以是公开的。
现在考虑以下两个项目:
using static System.Console;
namespace HelloWorld
{
class Program
{
public static void Main()
{
WriteLine("Hello World");
}
}
}
我将public
修饰符指定给Main。
然后我编译它以生成一个名为HelloWorld.exe
的应用程序。
namespace Invoker
{
class Program
{
static void Main()
{
// I want to invoke Main in HelloWorld.exe here.
// How to do it?
}
}
}
此项目尝试调用Main
HelloWorld.exe
不使用Process
,Invoker.exe
如何在Main
中定义公开HelloWorld.exe
?此问题用于查找从外部调用公共Main的示例。这就是为什么我不想使用Process
。
答案 0 :(得分:2)
Main 不应该是公开的,因为它不应该被程序集中的任何其他方法调用。只有CLR应该能够在应用程序启动时调用它。访问说明符不以与CLR管理的程序集相同的方式(如果有的话)应用于CLR。
如果你想让它公开;但这意味着任何其他应用程序都可以在没有反射的情况下引用它。
那是运行时的作用;刚开始寻找名为" Main"的静态方法使用各种签名然后调用它找到的第一个签名。可能是这样的:
foreach(Type type in assembly.GetTypes())
{
foreach(MethodInfo methodInfo in type.GetMethods(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public))
{
if (methodInfo.Name == "Main" /*TODO: && methodInfo.Parameters is valid*/)
{
methodInfo.Invoke(null, new object[0]);
}
}
}