如何在C#中实现一个方法,一个接口,带参数和返回值泛型

时间:2017-06-23 09:53:48

标签: c# generics interface

我想在C#中实现一个带有通用输入参数和返回值的接口。 目前我已定义了一个界面:

interface IResponseFormatter
{
    T formatResponseOptimizated<T>(T[] tagsValues);
}
之后我试图实现一个具体的类:

public class FormatResponseInterpolatedData : IResponseFormatter

{
    ILog log = LogManager.GetLogger(typeof(HistorianPersistenceImpl));



    public Dictionary<string, List<object[]>> formatResponseOptimizated <Dictionary<string, List<object[]>>> (IHU_RETRIEVED_DATA_VALUES[] tagsValues)
    {
        log.Info("ENTER [formatResponseOptimizated] tagValues: " + tagsValues);
        Dictionary<string, List<object[]>> result = new Dictionary<string, List<object[]>>();

        // built data logic

        return result;
    }
}

我想了解我的错误以及如何制作此实现类型。

2 个答案:

答案 0 :(得分:3)

您正在非通用接口中定义泛型方法。

TformatResponseOptimizated类型参数移至IResponseFormatter类型参数,并在实现类中提供规范:

interface IResponseFormatter<T> {
    // Follow C# naming conventions: method names start in an upper case letter
    T FormatResponseOptimizated(T[] tagsValues);
}
public class FormatResponseInterpolatedData
     : IResponseFormatter<Dictionary<string,List<object[]>>> {
    public Dictionary<string,List<object[]>> FormatResponseOptimizated(Dictionary<string,List<object[]>>[] tagsValues) {
        ...
    }
}

请注意,对于单个类型参数T,返回类型FormatResponseOptimizated必须与其参数T[]所使用的数组元素的类型相匹配。如果两者不同,请在两种类型上参数化您的界面,例如,TArg表示参数,TRet表示返回。

答案 1 :(得分:1)

我展示了更正的实施:

<强>接口

interface IResponseFormatter<T,U>
{
    T formatResponseOptimizated(U[] tagsValues);
}

已实施班级:

public class FormatResponseInterpolatedData : IResponseFormatter<Dictionary<string, List<object[]>>, IHU_RETRIEVED_DATA_VALUES>

{

    public Dictionary<string, List<object[]>> formatResponseOptimizated(IHU_RETRIEVED_DATA_VALUES[] tagsValues)
    {
        // implemented data logic
    }
}

由于