簡體   English   中英

如何使用泛型類而不必聲明泛型類型

[英]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>.parametersConverter<double>.parameters不相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM