Pourquoi cela ne fonctionne-t-il pas?Implémentation générique de l'interface
public interface IPoint
{
// not important
}
public interface IPointList
{
List<IPoint> Points { get; }
}
public abstract class Point : IPoint
{
// implemented IPoint
}
public abstract class PointList<TPointType> : IPointList
where TPointType: IPoint
{
public abstract List<TPointType> Points { get; } // <- doesn't compile
}
Le TPointType doit évidemment être un IPoint. Pourquoi cette implémentation n'est pas autorisée?
salutations, Kate
Élégant. Merci c'est exactement ce que je recherchais et ça fonctionne comme un charme. – SmartK8
Cela pourrait toujours retourner null lorsqu'il est utilisé comme ceci: {PointList liste = new PointList (); var x = ((liste IPointList)) .GetPoints; } dans ce cas, x sera nul, car IList ne peut pas être converti en IList (au moins pas avant C# 4.0 dans VS 2010). –
configurator
Maintenant que j'y pense, cela ne fonctionnerait pas en C# 4.0 non plus parce qu'un IList n'est pas covariant. – configurator