我将从代码开始
class LocData
{
public virtual TypeA Copy () { ... }
...
}
class LocDataCollection<T> : List<T> where T: LocData
{
public LocDataCollection<T> Copy()
{
LocDataCollection<T> locDatas = new LocDataCollection<T>();
foreach (T locData in this)
{
T locData2 = locData.Copy() as T;
locDatas.Add(locData2);
}
return locDatas;
}
...
}
和
class TypeA : LocData
{
public new TypeA Copy () { ... }
...
}
class TypeACollection : LocDataCollection<TypeA>
{
}
测试代码:
TypeACollection typeAs = new TypeACollection();
...
TypeACollection typeAs2 = typeAs.Copy();
编译消息:
“无法将类型 'LocDataCollection' 隐式转换为 'TypeACollection'。存在显式转换(您是否缺少演员表?)”
我必须改为
TypeACollection typeAs2 = typeAs.Copy() as TypeACollection;
编译通过,但在运行时出错。即使 typeAs 不为 null,typeAs2 也会返回 null。