![](/img/trans.png)
[英]C# - How can I declare a variable in MainForm class of type “Generic Class” without specifing generic type
[英]how to use a class with generics without having to declare the generic type
首先,我来自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);
}
}
您可以使用通用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());
您必须定义一个基于所有转换器的接口:
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
不相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.