コードから始めます
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として返されます。