我想将一些程序逻辑抽象到基类中以执行命令行程序(功能类似于this question was requesting)。
换句话说,是这样的:
public abstract class BaseProgram<T>
{
public static void Main(string[] args)
{
Console.WriteLine(typeof(T));
}
}
public class Program : BaseProgram<string>
{
}
请务必注意,BaseProgram位于不同的程序集中。
但是,这不起作用。
static void Main(string[] args)
方法必须在派生类中。谁能解释为什么?毕竟,以下内容完全是“合法”的:Program.Main(null);
BaseProgram<string>.Main(null);
并输出:
> System.String
> System.String
我想知道的是:是否有记录在案的结果原因?
最佳答案
正如在回答另一个答案的过程中最终揭示的那样,您的BaseProgram<T>
类与您尝试执行的类位于不同的程序集中。程序集的入口点必须在该程序集中。
否则,就像给某人一把钥匙,然后告诉他们这是您房子前门的钥匙。除了钥匙实际上是用于其他完全不同的房屋的前门之外,因此当它们出现在您的房屋时对他们没有好处。
如果要使用BaseProgram<T>
的Main()
方法,则需要委托给它。例如,在您自己的程序集中:
static class Program
{
public static int Main(string[] args)
{
return BaseProgram<string>.Main(args);
}
}
请注意,对于静态类型或类型的静态成员,实际上不需要继承基本类型,因为您只需通过实际的类型名称而不是实例引用来调用它。
关于c# - 使用基类中的静态void Main()方法作为程序的入口点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27050960/