4

我有一个带有静态方法的通用类程序,如下所示:

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

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

4

2 回答 2

3

当你这样做时Program1 : Program,你告诉所有 Program1 实例不仅是 Program1 类型,而且也是 Program1 类型,因为它继承了它。

但是当你这样做时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
    }
}

在 using 的情况下Program1<T>,我看不到任何解释该用法的内容,除非您尝试做一些我们在问题中没有读到的进一步的事情。在这里,T 并不是真正的程序,即使您像以前那样设置了约束。T 只是一个泛型类型。使用它的原因是允许你的类使用不同的类型。如果您只使用一种类型,则没有理由使用泛型类型,只需使用Program.

于 2013-05-02T11:15:57.573 回答
2

当您的通用类型的条件是“程序”类型本身时,我认为您可能不希望“程序 1”扩展“程序”。

于 2013-05-02T10:56:22.170 回答