Ich habe eine konkrete Klasse, die eine Sammlung einer anderen konkreten Klasse enthält. Ich mag beiden Klassen über Schnittstellen belichten, aber ich habe Probleme, herauszufinden, wie ich das Sammlung <ConcreteType> Mitglied als Sammlung <Schnittstelle> Mitglied aussetzen kann.Wie können Sie eine Sammlung <ConcreteType> als Sammlung zurückgeben <Interface>?
Ich bin derzeit .NET 2.0
Der Code unten führt zu einem Compiler-Fehler mit:
Cannot implicitly convert type 'System.Collections.ObjectModel.Collection<Nail>' to 'System.Collections.ObjectModel.Collection<INail>'
Der kommentierte Versuch zu werfen diesen Compiler-Fehler geben:
Cannot convert type 'System.Collections.ObjectModel.Collection<Nail>' to
'System.Collections.ObjectModel.Collection<INail>' via a reference conversion, boxing conversion, unboxing conversion, wrapping conversion, or null type conversion.
Gibt es Gibt es eine Möglichkeit, die Sammlung konkreter Typen als eine Sammlung von Schnittstellen verfügbar zu machen, oder muss ich eine neue Sammlung in der Getter-Methode der Schnittstelle erstellen?
using System.Collections.ObjectModel;
public interface IBucket
{
Collection<INail> Nails
{
get;
}
}
public interface INail
{
}
internal sealed class Nail : INail
{
}
internal sealed class Bucket : IBucket
{
private Collection<Nail> nails;
Collection<INail> IBucket.Nails
{
get
{
//return (nails as Collection<INail>);
return nails;
}
}
public Bucket()
{
this.nails = new Collection<Nail>();
}
}
Sie mögen die Serie von Artikeln hier lesen: http://blogs.msdn.com/ericlippert/archive/tags/Covariance+and+Contravariance/default .aspx –