Возвращаясь на С# через несколько лет, я немного ржавый. Пришел через этот (упрощенный) код, и он оставил мою голову царапин.
Почему вы должны явно реализовать свойство IDataItem.Children
? Не удовлетворяет ли нормальное положение Children
? В конце концов, свойство используется непосредственно для его удовлетворения. Почему это не подразумевается?
public interface IDataItem {
IEnumerable<string> Children { get; }
}
public class DataItem : IDataItem {
public Collection<string> Children { get; } = new Collection<string>();
// Why doesn't 'Children' above implement this automatically?!
// After all it used directly to satisfy the requirement!
IEnumerable<string> IDataItem.Children => Children;
}
Согласно источнику С#, здесь определение Collection<T>
:
[System.Runtime.InteropServices.ComVisible(false)]
public class Collection<T> :
System.Collections.Generic.ICollection<T>,
System.Collections.Generic.IEnumerable<T>, <-- Right Here
System.Collections.Generic.IList<T>,
System.Collections.Generic.IReadOnlyCollection<T>,
System.Collections.Generic.IReadOnlyList<T>,
System.Collections.IList
Как вы можете видеть, он явно реализует IEnumerable<T>
и из моего понимания, если "X" реализует "Y", тогда "X" является "Y", поэтому Collection<String>
является IEnumerable<String>
поэтому я не знаю, почему это не удовлетворено.