У меня есть конкретный класс, который содержит коллекцию другого конкретного класса. Я хотел бы, чтобы выставить обоих классов через интерфейсы, но у меня возникают проблемы, выяснить, как я могу выставить Collection <ConcreteType> член как Коллекция < интерфейса > член.Как вы можете вернуть коллекцию <ConcreteType> в виде коллекции <Interface>?
настоящее время я использую .NET 2.0
Код ниже приводит к ошибке компилятора:
Cannot implicitly convert type 'System.Collections.ObjectModel.Collection<Nail>' to 'System.Collections.ObjectModel.Collection<INail>'
Закомментированный попытка бросить дать эту ошибку компилятора:
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.
Есть любой способ показать коллекцию конкретных типов в виде набора интерфейсов или мне нужно создать новую коллекцию в методе getter интерфейса?
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>();
}
}
Вы можете как прочитать серию статей: http://blogs.msdn.com/ericlippert/archive/tags/Covariance+and+Contravariance/default .aspx –