【发布时间】:2009-07-31 00:37:25
【问题描述】:
首先让我说我对使用接口很陌生。
我正在编写一个方法 (GetClaimDetails),它将返回有关医疗保险索赔的信息。如果是索赔类型 A,它将返回 ClaimDetailA 类的列表。如果声明类型 B,则返回 ClaimDetailB 类的列表。这两个类共享共同的属性,但每个都有独特的属性。通用属性在接口中实现。
我提取了一个名为 IClaimDetail 的接口并设置两者来实现它。当我将方法设置为返回 IClaimDetail 并让它返回实现 IClaimsDetail 的对象的实例时,我会收到编译器消息
'不能将类型'System.Collections.Generic.List DentalClaimDetail'隐式转换为'System.Collections.Generic.List IClaimDetail'
private static List<IClaimDetail> GetClaimDetailsB(string claimNumber, string connectionStringName)
{
var claimReportRows = new List<DentalClaimDetail>();
..removed for brevity
return claimReportRows;
}
public class DentalClaimDetail : IClaimDetail
{
...
}
当一个方法返回一个接口时,你只返回一个实现该接口的对象。正确的?我做错了什么?
【问题讨论】:
-
见 Daniel White 的回答。在 .NET 4 中应该支持这一点(类型协方差)