说我有这样的课程:
static class TestClass<T>
{
public static void TestMethod(T t)
{
}
}
有没有办法推断参数,所以我可以替换它:
TestClass<int>.TestMethod(5);
有了这个吗?
TestClass.TestMethod(5);
答案 0 :(得分:3)
不是这个类是通用的。但是只使静态方法有效:
static class TestClass
{
public static void TestMethod<T>(T t)
{
}
}
调用:
TestClass.TestMethod(5); // TestClass.TestMethod<int>(int t)
答案 1 :(得分:0)
如果你仍然需要通用的静态类(不仅仅是通用的静态方法),你可以为它写一个类似“工厂”类的smth(我称之为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