Assume we have following interface:
public interface ILine<T>
{
T Item { get; set;}
}
I do have classes Line1
and Line2
implementing it
public class Item1
{
}
public class Item2
{
}
public class Line1 : ILine<Item1>
{
public Item1 Item {get; set;}
}
public class Line2 : ILine<Item2>
{
public Item2 Item { get; set; }
}
Now i have a class
public class Lines1
{
public Line1[] Items { get; set;}
}
I would like to create an interface
public interface ILines<T>
{
ILine<T>[] Items { get; set;}
}
And let Lines1 implement it Lines1 : ILines<Item1>
(and Lines2
do the same with Item2
). But it's not possible, because of complier error
'Lines1' does not implement interface member 'ILines.Items'. 'Lines1.Items' cannot implement 'ILines.Items' because it does not have the matching return type of 'IEnumerable>'.
The classes are deserialized from xml, so i really need properties as Item1
, Item2
, Line1
, Line2
not as interfaces.
What could i do to go forward? Or i am trying to apply some famous antipattern?
Update: Very good explanation, why it is not possible: covariance in c#
Unfortunately i haven't found it before writing question.