在泛型类上调用静态方法

时间:2013-05-02 10:33:34

标签: c# generics

我有一个泛型类程序,静态方法如下:

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();                
}

一切都运行良好。 你能解释一下我可能犯下的错误吗?

2 个答案:

答案 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”。