首先,我来自Java背景,所以请原谅我的错误:
这是我的班级
class ParameterHandler<T>
{
public static Dictionary<string, Converter<T>> parameters =
new Dictionary<string, Converter<T>>();
public static void addParameter(string parameterName, Converter<T> converter){
parameters.Add(parameterName, converter);
}
static T getValue(string parameterName, string stringValue){
return parameters[parameterName].getValue(stringValue);
}
}
这是我的Converter
界面
interface Converter <T>
{
T getValue(string stringValue);
}
我想知道我是否可以使用parameterhandler而不必将T
声明为它的泛型类型
我只需要做一些像
这样的事情ParameterHandler.addParameter("some", Some Implementation for Converter)
并且为了让您了解整体情况,这是我对Converter
class IntConverter : Converter<int>
{
int getValue(string stringValue)
{
return int.Parse(stringValue);
}
}
答案 0 :(得分:4)
您可以使用通用addParameter
方法创建非泛型ParameterHandler类:
public static class ParameterHandler
{
public static void addParameter<T>(string name, Converter<T> c)
{
ParameterHandler<T>.addParameter(name, c);
}
}
然后你可以使用
ParameterHandler.addParameter("some", new IntConverter());
答案 1 :(得分:4)
您必须定义一个适用于所有转换器的接口:
interface Converter
{
}
interface Converter<T> : Converter
{
T getValue(string stringValue);
}
然后:
class ParameterHandler
{
public static Dictionary<string, Converter> parameters =
new Dictionary<string, Converter>();
public static void addParameter<T>(string parameterName, Converter<T> converter){
parameters.Add(parameterName, converter);
}
static T getValue<T>(string parameterName, string stringValue){
if(!parameters[parameterName] is Convereter<T>)
throw new Exception("Invalid Type");
return ((Convereter<T>)parameters[parameterName]).getValue(stringValue);
}
}
请注意,在初始模型中,每种类型T
都有不同的字典,Converter<int>.parameters
和Converter<double>.parameters
不相同。