Вы можете быть лучше здесь, используя дженерики:
public interface ICollection<T> where T : IObject
{
T[] Values { get; set; }
}
public class Collection : ICollection<SecondObject>
{
public SecondObject[] Values { get; set; }
}
Причина, по которой это не работает сейчас, заключается в том, что подпись должна точно совпадать. Это означает, что Values
должен быть массивом IObject
, а это не так. Используя обобщения, вы можете решить эту проблему, сохранив ограничение типа.
Вторым, но нецелесообразным решением будет использование явной реализации интерфейса:
public SecondObject[] Values { get; set; }
IObject[] ICollection.Values
{
get
{
return this.Values;
}
set
{
this.Values = value?.Cast<SecondObject>().ToArray();
}
}