Интерфейс списка: от Java до C#

#c# #java #list #interface #generic-collections

#c# #java #Список #интерфейс #общие-коллекции

Вопрос:

В наши дни я программист на Java, изучающий C #.

Обычно в Java при использовании списков должно быть предпочтительное программирование по сравнению с его интерфейсом, чтобы переключаться между реализациями:

 List<Object> list = new ArrayList<Object>();
//or
list = new LinkedList<Object>(); 
 

Как насчет C #? Существует ли подобный подход? Может кто-нибудь показать мне пример? С тех пор я создаю список таким образом, но я не думаю, что список — это интерфейс:

 List<int> list = new List<int>();
list.Add(2);
 

Ответ №1:

В .NET также предпочтительнее работать с максимально возможным объектом в иерархии. Вы могли бы использовать IList<T> интерфейс:

 IList<int> list = new List<int>();
list.Add(2);
 

И если вам не нужно обращаться к списку по индексу, вы также можете использовать ICollection<T> интерфейс, который находится еще выше в иерархии.

Или, если вы хотите только перечислять по списку, вы можете использовать максимально возможный интерфейс, который IEnumerable<T> :

 IEnumerable<int> list = new List<int>(new[] { 1, 2, 3 });
foreach(int item in list)
{
    ...
}
 

Ответ №2:

 IList<int> = new List<int>();
 

в C # это просто — если он начинается с I его интерфейса.

Ответ №3:

List<T> реализует ряд интерфейсов, включая IList<T> и ICollection<T> . Возможно, вам потребуется изучить ваш код, чтобы определить, какой интерфейс является наиболее подходящим.

Комментарии:

1. спасибо .. не могли бы вы объяснить разницу между IList и ICollection в нескольких словах?

2. @Heisenbug — я ссылался на их документацию, и @Darin уже объяснил ключевое отличие — IList<T> поддержка индексированного доступа.

Ответ №4:

В .net IList<T> есть интерфейс. И вы можете назначить ему любую из реализаций интерфейса, например List<T> . Смотрите реализации этого интерфейса: http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx#inheritanceContinued