如何使用具有泛型的类而不必声明泛型类型
本文关键字:不必 声明 泛型类型 何使用 泛型 | 更新日期: 2023-09-27 18:10:28
首先,我来自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);
}
我想知道我是否可以使用参数处理程序,而不必将T
声明为它的泛型类型
我只需要做一些像
ParameterHandler.addParameter("some", Some Implementation for Converter)
,为了让你了解全局,这是我对Converter
class IntConverter : Converter<int>
{
int getValue(string stringValue)
{
return int.Parse(stringValue);
}
}
您必须为所有转换器定义一个基本接口:
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
不相同。
你可以用一个通用的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());