是否有简单的c#代码示例可以从外部调用带有公共修饰符的Main()
本文关键字:Main 代码 简单 是否 外部调用 | 更新日期: 2023-09-27 18:18:59
引自本网站(点击):
Main在类或结构内部声明。Main必须是静态的,它不应该是公共的。
这意味着Main方法可以是公共的。
现在考虑以下两个项目:
项目1:HelloWorld
using static System.Console;
namespace HelloWorld
{
class Program
{
public static void Main()
{
WriteLine("Hello World");
}
}
}
我将public
修饰符赋值给Main。然后我将其编译成一个名为HelloWorld.exe
的应用程序。
项目2:Invoker
namespace Invoker
{
class Program
{
static void Main()
{
// I want to invoke Main in HelloWorld.exe here.
// How to do it?
}
}
}
这个项目尝试调用HelloWorld.exe
中定义的Main
如果不使用Process
, Invoker.exe
如何调用在HelloWorld.exe
中定义的公共Main
?这个问题用来找到一个从外部调用public Main的例子。这就是为什么我不想使用Process
Main不应该是公共的,因为它不应该被程序集中的任何其他方法调用。只有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]);
}
}
}