Недавно я решил освежить свою память об основах C #, так что это может быть тривиально, но я столкнулся со следующей проблемой:
StringCollection
использовался в .NET v1.0 для создания строго типизированной коллекции для строк в отличие от объекта
на основе ArrayList
(позже он был расширен за счет включения универсальных коллекций):
Взглянув на определение StringCollection
, вы увидите следующее:
// Summary:
// Represents a collection of strings.
[Serializable]
public class StringCollection : IList, ICollection, IEnumerable
{
...
public int Add(string value);
...
}
Вы можете увидеть, что оно реализует IList
, который содержит следующее объявление (среди нескольких других объявлений):
int Add(object value);
Но нет:
int Add(string value);
Моим первым предположением было это возможно из-за правил ковариации .NET framework.
Поэтому, чтобы убедиться, я попытался написать свой собственный класс, который реализует IList
и изменил
int Add(object value);
, чтобы получить строковый тип вместо тип объекта, но, к моему удивлению, при попытке скомпилировать проект я получил ошибку времени компиляции:
does not implement interface member 'System.Collections.IList.Add(object)'
Есть идеи, что вызывает это?
Спасибо!