我想将一些程序逻辑抽象到基类中以执行命令行程序(功能类似于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/

10-12 03:50
查看更多