我想在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;
}
}
我想了解我的错误以及如何制作此实现类型。
答案 0 :(得分:3)
您正在非通用接口中定义泛型方法。
将T
从formatResponseOptimizated
类型参数移至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
}
}
由于