假设我有这样的课程:
static class TestClass<T>
{
public static void TestMethod(T t)
{
}
}
有什么方法可以推断出这些论点,所以我可以替换它:
TestClass<int>.TestMethod(5);
有了这个?
TestClass.TestMethod(5);
不是类是通用的。但是,仅使方法静态有效:
static class TestClass
{
public static void TestMethod<T>(T t)
{
}
}
调用:
TestClass.TestMethod(5); // TestClass.TestMethod<int>(int t)
如果您仍然需要通用静态类(不仅是通用静态方法),您可以为它编写一个“工厂”类(我称之为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