3

假设我有这样的课程:

static class TestClass<T>
{
    public static void TestMethod(T t)
    {

    }
}

有什么方法可以推断出这些论点,所以我可以替换它:

TestClass<int>.TestMethod(5);

有了这个?

TestClass.TestMethod(5);
4

2 回答 2

3

不是类是通用的。但是,仅使方法静态有效:

static class TestClass
{
    public static void TestMethod<T>(T t)
    {

    }
}

调用:

TestClass.TestMethod(5);    // TestClass.TestMethod<int>(int t)
于 2012-11-26T01:36:24.330 回答
0

如果您仍然需要通用静态类(不仅是通用静态方法),您可以为它编写一个“工厂”类(我称之为MyInvoker):

static class MyClass<T>
{
    static T myT;

    public static void DoWork<T>(T t)
    {
    }
}

static class MyInvoker
{
    public static void DoWork<T>(T t)
    {
        MyClass<T>.DoWork(t);
    }
}

稍后在您的代码中,您可以使用MyInvoker在类名中省略泛型,例如:

MyInvoker.DoWork(4);

这将使您在此调用程序中重复原始类中的所有方法,因此我认为这不是一个很好的解决方案。明显违反了 DRY 原则。当然,可以尝试通过反思来做到这一点,但这是另一个具有众所周知的缺点的故事。


如果你的类是非静态的,你可以使用这样的工厂方法:

static class TestClass
{
    public static TestClass<T> GetInstance<T>(T _t)
    {
        return new TestClass<T>(_t);
    }
}

class TestClass<T>
{
    T t;

    public TestClass(T _t)
    {
        this.t = _t;
    }

    public T Value
    {
        get
        {
            return t;
        }
    }

    //...        
}

var tc = TestClass.GetInstance(5);
int val = tc.Value; //int TestClass<int>.Value
于 2012-11-26T01:54:23.910 回答