我陷入了泛型类和接口的实现。我不确定我想做什么是可能的。
这是我的代码: - 我已经定义了一个类型没有像
那样定义的泛型类public class Response<T>
{
public T Data { get; set; }
public Response()
{
Data = default(T);
}
}
和一个现在有一个功能的接口
public interface IOInterface<T> where T : Response<T>
{
Response<T> ReadAdvantechChannel(Dictionary<string, string> IOParameters);
}
一个派生类将实现此接口: -
public class AdvantechOperation : IOInterface<T>
{
public Response<AIRecordInfo> ReadAdvantechChannel(Dictionary<string, string> IOParameters)
{
Response<AIRecordInfo> resp = new Response<AIRecordInfo>();
}
}
和AIrecordinfo再次上课
public class AIRecordInfo
{
double[] ArryMaxValueAIdouble;
double[] ArryMinValueAIdouble;
double[] ArryAVGValueAIdouble;
}
我想要做的是实现一个实现define接口的类,但返回类型的接口函数对于我未来的派生类是不明确的,这就是为什么我把它变成通用的并尝试实现它我现在的类&#34; AdvantechOperation& #34 ;.我的界面将有三个函数,所有函数返回类型将彼此不同,这就是为什么我使它成为泛型返回类型响应和我现在的类AdvantechOperation,T替换为AIRecordInfo。 但是在编译这个项目时我面临的错误是
错误7类型&#39; T&#39;不能用作类型参数&#39; T&#39;在里面 通用类型或方法&#39; IOModule.IOInterface&#39;。没有拳击 转换或类型参数转换来自&#39; T&#39;至 &#39; IOModule.Response&#39 ;. D:\ MTS \ SMS \ DAQAdvantechdll \ DAQAdvantechdll \ IOCommunication.cs 28 18 IOModule 错误8&#39; IOModule.AdvantechOperation&#39;没有实现接口 会员 &#39; IOModule.IOInterface.ReadAdvantechChannel(System.Collections.Generic.Dictionary)&#39 ;. &#39; IOModule.AdvantechOperation.ReadAdvantechChannel(System.Collections.Generic.Dictionary)&#39; 无法实施 &#39; IOModule.IOInterface.ReadAdvantechChannel(System.Collections.Generic.Dictionary)&#39; 因为它没有匹配的返回类型 &#39; IOModule.Response&#39 ;. D:\ MTS \ SMS \ DAQAdvantechdll \ DAQAdvantechdll \ IOCommunication.cs 28 18 IOModule
答案 0 :(得分:1)
删除接口的泛型类型约束,并在实现接口时使用AIRecordInfo
作为泛型类型参数:
public class AdvantechOperation : IOInterface<AIRecordInfo>
{ ... }
答案 1 :(得分:1)
在我看来,你想要这个:
public class Response<T> { }
public interface IOInterface<T> where T : Response<T>
{
T ReadAdvantechChannel(Dictionary<string, string> IOParameters);
}
public class AdvantechOperation : IOInterface<AIRecordInfo>
{
public AIRecordInfo ReadAdvantechChannel(Dictionary<string, string> IOParameters)
{
return new AIRecordInfo();
}
}
public class AIRecordInfo : Response<AIRecordInfo>
{
double[] ArryMaxValueAIdouble;
double[] ArryMinValueAIdouble;
double[] ArryAVGValueAIdouble;
}
Response<T>
不再需要正文,因为IOInterface<T>
的方法只返回必须从T
继承的Response<T>
。