#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