![](/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.