我有一个通用类Program,其中静态方法如下:
class Program
{
public static void Main()
{
Console.WriteLine("HI from program");
Console.ReadLine();
}
}
当我尝试访问以下泛型类Program1中的静态Main方法:
class Program1<T> : Program where T : Program
{
public static void check()
{
T.Main();
}
}
我遇到了这个错误:
然而,如果我使用“T”是一个“类型参数”,在给定的上下文中无效。
public static void check()
{
Program.Main();
}
一切运行良好。您能解释一下我可能犯的错误吗?
static
理解为“属于类而不是实例”的想法很诱人,这样做可能会起作用;但更好的理解 C# 中的static
的方式是“在编译时可解析”,这就很明显为什么这样做不行。 - AakashMT
可能是没有Main
的东西;编译器是否应该检查每个继承者的Program
以绑定调用? - AakashMT
的知识直接绑定到该类,就像C++模板一样。我知道泛型不是这样工作的(例如,在我可以在我的应用程序中引用的程序集中提供这样的通用类型是不可能的),因此在实践中无法做到这一点,但至少这不是明显为什么不能解决。使其不可解决的原因是Program1<T>
与其最终类型参数T
独立编译。 - Jon