我有一个泛型类程序,静态方法如下:
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();
}
一切都运行良好。 你能解释一下我可能犯下的错误吗?
答案 0 :(得分:3)
执行Program1 : Program
时,您告诉所有Program1实例不仅属于Program1类型,还属于Program类型,因为它继承了它。
但是当你执行Program1<T>
时,你告诉Program1除了它自己的类型之外还可以有任何独立的类型参数,以便用这种独立的类型做事。
如果您使用Program1 : Program
,您的静态方法可以执行以下操作:
class Program1 : Program
{
public static void check()
{
Program.Main() // but the real good thing to do is just avoid this check method.
// and use just Program1.Main() in other places
}
}
在使用Program1<T>
的情况下,我无法看到解释该用法的任何内容,除非您尝试做一些我们未在问题中阅读的内容。在这里,即使你像你一样设置约束,T也不是真正的程序。 T只是一种通用类型。使用它的原因是允许您的类使用不同类型。如果您只使用一种类型,则没有理由使用通用类型,只需使用Program
。
答案 1 :(得分:2)
我认为当你的Generic Type的条件是“Program”类型本身时,你可能不希望“Program1”扩展“Program”。